C#WCF NetTCPBinding阻止应用程序

Luk*_*ina 6 c# wcf nettcpbinding

我有一个基本的buddylist类型的应用程序,它是WCF中的pub/sub交易.我的问题是一个或两个调用长时间运行,这会阻塞整个服务器应用程序(gui更新等).

这是我的代码:

[ServiceContract(SessionMode = SessionMode.Required,
CallbackContract = typeof(IBuddyListContract))]
public interface IBuddyListPubSubContract
{
    [OperationContract]
    string GetABunchOfDataZipped(String sessionId); // this can take > 20 seconds

    ....
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, 
    ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BuddyListPubSubContract : IBuddyListPubSubContract
{
    string GetABunchOfDataZipped(String sessionId)
    {
        // do some calculations and data retrival
        return  result;
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我对如何解决这个问题有了一个想法,但有一种更简单的方法吗?

想法1:让GetABunchOfDataZipped(String sessionId)成为一个空白,当它完成时,我的双工合同上有另一个端点,我点击它.我不喜欢这种情况,就好像我的架构发生了根本性的变化,如果字符串是通过慢速互联网连接的大块文本,它仍然会遇到同样的问题?

Joe*_*l C 2

我的问题是一两个调用长时间运行,这会阻塞整个服务器应用程序(gui 更新等)。

您不清楚在哪里看到阻止行为,但听起来像是在客户端。您应该从后台线程而不是 UI 线程调用 WCF 服务。然后,当您处理结果时,您将无法直接与 UI 元素交互,您将需要使用每个控件的Invoke方法。