Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/09/2011, 03:27
tanissturm
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta WCF asincrono en C#

Pretendo realizar una función asincrona de prueba en C# para el WCF y usando el Visual Studio 2008 y Framework 3.5.
He configurado mi sitio web para poder operar con el WCF y desde cliente realizo la llamada a la función suma y me devuelve el resultado. Pero al cambiar las funciones en asincronos me sale el siguiente error al llamar al Endsuma "Se llamó a Async End en un canal erróneo. Nombre del parámetro: result"

Mi cliente tiene:

Código C:
Ver original
  1. protected void sumar_click(object sender, EventArgs e)
  2. {
  3.    WCF_SitioWeb.ServiceClient conexion = new WCF_SitioWeb.ServiceClient();
  4.    conexion.Beginsuma(Convert.ToInt32(txt_sumando1.Text), Convert.ToInt32(txt_sumando2.Text), finalizar_suma_asincrona, null);
  5. }
  6.  
  7. void finalizar_suma_asincrona(IAsyncResult resultado)
  8. {
  9.    WCF_SitioWeb.ServiceClient conexion = new WCF_Record_SitioWeb.RecordServiceClient();
  10.    txt_suma.Text = conexion.Endsuma(resultado).ToString();
  11.       resultado.AsyncWaitHandle.Close();
  12. }

Y mi WCF tiene en el lado de los contratos
Código C:
Ver original
  1. [OperationContract(AsyncPattern = true)]
  2. IAsyncResult Beginsuma(int sumando1, int sumando2, AsyncCallback cl, object ob);
  3.  
  4. decimal Endsuma(IAsyncResult call);
  5.  
  6. //decimal suma(int sumando1, int sumando2);
  7.  
  8. internal delegate decimal suma_Asincrono_Delegado(int sumando1, int sumando2);
  9.  
  10. public class Estado1
  11. {
  12.   internal suma_Asincrono_Delegado suma_dlg;
  13.   public object EstadoPrevio;
  14. }

Y en la parte de los servicios
Código C:
Ver original
  1. /*public decimal suma (int sum1, int sum2)
  2. {
  3.     return sum1 + sum2;
  4. }*/
  5.  
  6. public IAsyncResult Beginsuma(int sumando1, int sumando2, AsyncCallback cb, object ob)
  7. {
  8.     suma_Asincrono_Delegado delegado = new suma_Asincrono_Delegado(calcular_suma);
  9.     Estado1 ms = new Estado1();
  10.     ms.suma_dlg = delegado;
  11.     ms.EstadoPrevio = ob;
  12.     return delegado.BeginInvoke(sumando1, sumando2, cb, ms);
  13. }
  14.  
  15. public decimal Endsuma(IAsyncResult call)
  16. {
  17.     Estado1 ms = (Estado1)call.AsyncState;
  18.     return ms.suma_dlg.EndInvoke(call);
  19. }
  20.  
  21. private decimal calcular_suma(int sumando1, int sumando2)
  22. {
  23.     return sumando1 + sumando2;
  24. }

gracias de antemano