Foros del Web » Programando para Internet » ASPX (.net) »

WCF asincrono en C#

Estas en el tema de WCF asincrono en C# en el foro de ASPX (.net) en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/09/2011, 03:27
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 12 años, 7 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
  #2 (permalink)  
Antiguo 05/10/2011, 05:01
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: WCF asincrono en C#

Ya lo he resuelto de la siguiente forma
En el Service.svc (abrir con el editor de notas) hay que añadir a la cabecera 'Async="true"'.
Hay que ejecutar el SvcUtil.exe (C:\Archivos de programa\Microsoft SDKs\Windows\v6 .0\Bin) con el fichero IRecordService.cs (http://msdn.microsoft.com/es-es/library/aa347733.aspx)
Se generará uno nuevo con todas las clases y opciones que pueden haber para los contratos asincronos y no asincronos.
Reemplazaremos el antiguo por el nuevo fichero.
Luego aplicamos las directivas de seguridad.(http://msdn.microsoft.com/es-es/library/ms734663.aspx)(http://msdn.microsoft.com/es-es/library/aa355038(v=VS.90).aspx)

Etiquetas: asincrona, asincrono, async, c###, c-sharp, iasync, wcf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:20.