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
protected void sumar_click(object sender, EventArgs e) { WCF_SitioWeb.ServiceClient conexion = new WCF_SitioWeb.ServiceClient(); conexion.Beginsuma(Convert.ToInt32(txt_sumando1.Text), Convert.ToInt32(txt_sumando2.Text), finalizar_suma_asincrona, null); } void finalizar_suma_asincrona(IAsyncResult resultado) { WCF_SitioWeb.ServiceClient conexion = new WCF_Record_SitioWeb.RecordServiceClient(); txt_suma.Text = conexion.Endsuma(resultado).ToString(); resultado.AsyncWaitHandle.Close(); }
Y mi WCF tiene en el lado de los contratos
Código C:
Ver original
[OperationContract(AsyncPattern = true)] IAsyncResult Beginsuma(int sumando1, int sumando2, AsyncCallback cl, object ob); decimal Endsuma(IAsyncResult call); //decimal suma(int sumando1, int sumando2); internal delegate decimal suma_Asincrono_Delegado(int sumando1, int sumando2); public class Estado1 { internal suma_Asincrono_Delegado suma_dlg; public object EstadoPrevio; }
Y en la parte de los servicios
Código C:
Ver original
/*public decimal suma (int sum1, int sum2) { return sum1 + sum2; }*/ public IAsyncResult Beginsuma(int sumando1, int sumando2, AsyncCallback cb, object ob) { suma_Asincrono_Delegado delegado = new suma_Asincrono_Delegado(calcular_suma); Estado1 ms = new Estado1(); ms.suma_dlg = delegado; ms.EstadoPrevio = ob; return delegado.BeginInvoke(sumando1, sumando2, cb, ms); } public decimal Endsuma(IAsyncResult call) { Estado1 ms = (Estado1)call.AsyncState; return ms.suma_dlg.EndInvoke(call); } private decimal calcular_suma(int sumando1, int sumando2) { return sumando1 + sumando2; }
gracias de antemano