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 originalprotected 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