C#WCF NetTCPBinding阻塞应用程序

问题描述

| 我有一个基本的好友列表类型的应用程序,它是WCF中的发布/订阅交易。我的问题是一个或两个调用长时间运行,这阻塞了整个服务器应用程序(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;
    }
}
到目前为止,我对如何解决这个问题有一个想法,但是有没有更简单的方法? 想法1:将GetABunchOfDataZipped(String sessionId)设为空,完成时会有另一个端点,该端点在我命中的双工合同上。我不喜欢这样,好像我的体系结构发生了根本性的变化,如果字符串是通过缓慢的Internet连接传输的大量文本,它仍然会遇到相同的问题吗?     

解决方法

           我的问题是一个或两个调用长时间运行,这阻塞了整个服务器应用程序(GUI更新等)。 您不清楚在哪里看到阻止行为,但是听起来好像是在客户端。您应该从后台线程而不是UI线程调用WCF服务。然后,当您处理结果时,您将无法直接与UI元素进行交互,您将需要使用每个控件的
Invoke
方法。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...