在WCF中将代理对象作为asyncState传递

时间:2009-10-23 14:58:38

标签: wcf proxy asynchronous

我有一个与WCF服务器通信的WCF客户端(C#)。这个客户端异步调用。我想知道以下是好主意还是坏主意:

从我的WCF客户端调用异步操作时,我将对象asyncState变量设置为代理对象。在我的回调函数中,我从AsyncState值中提取代理对象并在其上调用.EndFunction。

示例:

public void Login()
{
   Client client = CreateWCFProxy();
   client.BeginLogin(user, pass, OnLoginCompleted, client);
}

public void OnLoginCompleted(IAsyncResult result)
{
   Client client = result.AsyncState as Client;
   LoginResult loginResult = client.EndLogin(result);
}

我可以将Client存储为类成员,但是如果我正在进行许多可能变得复杂的同步异步调用。 (例如,如果代理在我进行一次异步调用时死机,我需要创建一个新的代理。但我仍然需要旧的代理能够在其他未完成的异步调用上调用.EndFunction。

1 个答案:

答案 0 :(得分:3)

这应该工作得很好。另一种方法是使用lambda表达式或匿名委托,这样就可以在完成的代码中使用相同的局部变量。

使用lambda表达式的示例

client.BeginLogin(user, pass,
    ar =>
    {
        LoginResult result = client.EndLogin(ar);
        Console.WriteLine(result);
    }, null);