Ric*_*per 6 c# asp.net wcf asp.net-web-api
我有一个WebAPI应用程序使用HTTP连接调用WCF服务.对WebAPI的调用来自用户浏览器.WCF服务托管在单独的IIS应用程序中.
由于一些遗留代码,WCF服务中的一个方法是一个长时间运行的进程,例如30秒,它产生一个大字节数组,然后我们返回并传递.
还有另一种方法不是一个长时间运行的过程,应该立即返回.但是,当客户端调用长进程时,阻止其他方法完成,直到长进程完成.
我尝试过很多东西,例如在服务中添加以下内容:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]
Run Code Online (Sandbox Code Playgroud)
并将以下内容添加到配置中:
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "100" />
</connectionManagement>
</system.net>
Run Code Online (Sandbox Code Playgroud)
并关闭会话状态:
<sessionState mode="Off" />
Run Code Online (Sandbox Code Playgroud)
但是,我无法让这些调用并行工作.我知道这与WCF服务防止Session问题的方式有关,但是我已经关闭了aspNetCompatibilityEnabled,我没有使用HttpContext会话或缓存,所以我不确定导致阻塞的原因.
关于如何让这些调用并行工作而不对其进行重大修改的任何想法?
这可能不是最好的解决方案,但我发现将可靠会话设置为 false 似乎可以解决所描述的情况下的问题。我个人最终没有使用它,但我会发布它以防其他人需要它。
这是我在 wcf web.config 中使用的设置。不要忘记在客户端也将可靠会话设置为 false。
<wsHttpBinding>
<binding name="BindingName" receiveTimeout="00:20:00" maxReceivedMessageSize="10485760">
<reliableSession enabled="false"/>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" />
<message establishSecurityContext="true" clientCredentialType="None" />
</security>
</binding>
</wsHttpBinding>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
730 次 |
| 最近记录: |