2012-02-21 18 views
7

Tengo lo siguiente (desde Tridion PowerTools), que obtiene un nombre de usuario del CoreService cuando se ejecuta JavaScript.¿Qué significan todos estos parámetros cuando se llama a un método web WCF de Anguila JavaScript?

JavaScript (Anguilla):

PowerTools.Popups.Example.prototype._onbtnGetUserInfoClicked = function() { 
    var onSuccess = Function.getDelegate(this, this._handleUserInfo); 
    var onFailure = null; 
    var context = null; 
    //call function 
    PowerTools.Model.Services.Example.GetUserInfo(onSuccess, onFailure, 
                context, false); 
}; 

// Delegate function "onSuccess" 
PowerTools.Popups.Example.prototype._handleUserInfo = function (response) { 
    var p = this.properties; 
    $j("#lblUserInfo").text(response.UserName); 
}; 

CoreService lado: (C# .svc)

[OperationContract, WebGet(ResponseFormat = WebMessageFormat.Json)] 
public ExampleData GetUserInfo() 
{ 
    var coreService = Client.GetCoreService(); 
    _exampleData = new ExampleData() 
    { 
     UserName = coreService.GetCurrentUser().Title 
    }; 
    return _exampleData; 
} 

Esto envía una llamada asincrónica:

PowerTools.Model.Services.Example.GetUserInfo(onSuccess, onFailure, context, false)

Considerando que la presente asigna una función diferente para manejar la respuesta:

Function.getDelegate(this, this._handleUserInfo)

Pero ¿de dónde onSuccess, onFailure, el contexto y el operador booleano provienen de: PowerTools.Model.Services.Example.GetUserInfo(onSuccess, onFailure, context, false)?

Esta firma de cuatro parámetros no coincide con el no-parámetro GetUserInfo() en el código de servicio. ¿Por qué esa orden y estas cuatro?

+0

Editar: aclaró qué parte I estaba confundido acerca de. –

Respuesta

7

onSuccess y onFailure son las funciones de devolución de llamada que se asignan para manejar la respuesta del servicio WCF.

Suponiendo que se trata de un código del proyecto PowerTools, hay un método de JavaScript generado automáticamente que actúa como un método proxy para un servicio WCF (fuente del servicio es here) método llamado GetUserInfo().

Allí realmente se puede ver la llamada al CoreService. Eso debería explicar el mapeo de los parámetros de proxy.

  1. onSuccess es la función de procesar la respuesta del servicio WCF
  2. onFailure es la función a ejecutar si la llamada falla
  3. context es una variable que se pasará de nuevo en sus funciones de devolución de llamada, por lo que puede usarlo para pasar cosas.
  4. false es si la llamada es sincrónico o no

Si su servicio WCF fuera a tomar parámetros, el proxy generada sería formar una firma diferente, algo así como

PowerTools.Model.Services.Example.GetOtherInfo(param1, param2, onSuccess, 
               onFailure, context, false); 
+0

Entonces, si la función C# es exitosa, su onSuccess será llamado con el valor de retorno de la función C#. Si se produce un error, se invocará su onFailure (con la excepción, creo). Y cualquiera de esas devoluciones de llamadas también obtendrá el userContext que pasa. –

+0

La explicación y el ejemplo con parámetros adicionales realmente ayudan, ¡gracias! Obtenemos onSuccess, onFailure, context y boolean síncrono "gratis" con el servicio WCM, que luego están disponibles para ser (opcionalmente) establecidos como delegados. –

Cuestiones relacionadas