gpt4 book ai didi

c# - 我可以创建一个 WCF,其中多个调用不会相互阻塞吗

转载 作者:太空狗 更新时间:2023-10-29 22:00:55 25 4
gpt4 key购买 nike

我有一个 WebAPI 应用程序,它使用 HTTP 连接调用 WCF 服务。对 WebAPI 的调用来自用户浏览器。 WCF 服务托管在单独的 IIS 应用程序中。

由于一些遗留代码,WCF 服务中的方法之一是一个长时间运行的进程,例如30 秒,它生成一个大字节数组,然后我们返回并可以继续传递。

还有另一种方法不是长时间运行的进程,应该立即返回。然而,当客户端调用长进程时,另一个方法将被阻止完成,直到长进程完成。

我已经尝试了很多事情,例如将以下内容添加到服务中:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerCall)]

并将以下内容添加到配置中:

  <system.net>
<connectionManagement>
<add address = "*" maxconnection = "100" />
</connectionManagement>
</system.net>

并关闭 session 状态:

<sessionState mode="Off" />

但是,我无法让这些调用并行工作。我知道这与 WCF 服务防止 session 问题的方式有关,但我关闭了 aspNetCompatibilityEnabled 并且我不使用 HttpContext Session 或 Cache,所以我不确定是什么原因造成的 block 。

关于如何让这些调用并行工作而无需对它们进行重大修改,我有什么想法吗?

最佳答案

这可能不是最好的解决方案,但我发现将 reliableSession 设置为 false 似乎可以解决所描述情况下的问题。我个人最终没有使用它,但我会发布它以防其他人需要它。

这是我在 wcf web.config 中使用的设置。不要忘记在客户端也将可靠 session 设置为 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>

关于c# - 我可以创建一个 WCF,其中多个调用不会相互阻塞吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24312088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com