0

我是 WCF Web 服务的新手。我的要求是创建一个 WCF 服务,它是第三方 COM dll 对象的包装器。

假设 dll 需要 5 秒来计算一个特定的输入。

当我创建服务并测试它(使用 WCF 测试客户端)时,我看到在第一个请求完成之前我无法发送第二个请求。

所以我正在考虑启动一个新线程来使用 com 功能并在完成后调用回调函数。我想在这个回调函数中发送响应和结束请求。这适用于命中 WCF 服务的每个请求。

我已经对此进行了测试,但问题是我在没有完成请求的情况下得到了响应。

我希望当前线程等到计算完成并同时接受其他请求

考虑到性能,你能告诉我如何解决这个问题吗?

我的服务将被多个 SAP Portals 客户端通过 SAP PI 使用

4

1 回答 1

0

可以在实现 ServiceContract 的服务类上应用 [ServiceBehavior] 属性来设置服务的并发模式。 http://msdn.microsoft.com/en-us/library/system.servicemodel.concurrencymode(v=vs.110).aspx

但是,在您在服务操作中访问 COM 组件的情况下,我会首先检查 COM 组件的线程模型,即它是实现单元 (STA) 还是 MTA。如果 COM 组件实现单元线程模型,COM 调用调用将被序列化。因此,更改 WCF ConcurrencyMode 不会产生任何影响。

HTH,阿米特·巴蒂亚

于 2014-01-06T15:39:34.707 回答