【问题标题】:Passing proxy object as asyncState in WCF在 WCF 中将代理对象作为 asyncState 传递
【发布时间】:2009-10-24 04:06:50
【问题描述】:

我有一个与 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);
}

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

【问题讨论】:

    标签: wcf proxy asynchronous


    【解决方案1】:

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

    使用 lambda 表达式的示例

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

    【讨论】:

    • 嗯,你的意思是我应该通过它而不是“OnLoginCompleted”?
    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多