我有一个使用HTTP连接调用WCF服务的WebAPI应用程序。对WebAPI的调用来自用户浏览器。 WCF服务托管在单独的IIS应用程序中。
由于某些遗留代码,WCF服务中的一种方法是长时间运行的过程,例如30秒,它产生一个大字节数组,然后我们返回并传递。
还有另一种方法不是一个长时间运行的过程,应该立即返回。但是,当客户端调用long进程时,另一种方法将被阻止完成,直到长进程完成。
我尝试过很多东西,例如在服务中添加以下内容:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]
并将以下内容添加到配置中:
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "100" />
</connectionManagement>
</system.net>
关闭会话状态:
<sessionState mode="Off" />
但是,我无法让这些调用并行工作。我知道这与WCF服务防止会话问题的方式有关,但我关闭了aspNetCompatibilityEnabled
并且我没有使用HttpContext会话或缓存所以我不确定是什么导致了块。
我可以采取哪些措施让这些调用并行工作,而无需对其进行重大修改?
答案 0 :(得分:0)
这可能不是最好的解决方案,但是我发现将可靠的会话设置为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>
答案 1 :(得分:0)
默认情况下,ReliableSession
确保消息按发送顺序传递。检查一下:System.ServiceModel.ReliableSession.Ordered
您需要将Ordered
设置为false
!
在内部它设置ReliableSessionBindingElement
的值。如果仍然无法解决问题,您还可以尝试将FlowControlEnabled
的{{1}}的值设置为ReliableSessionBindingElement
。