2009-12-22 86 views
0

由于this问题告诉我SoapHttpClientProtocol不是线程安全的。而且,我的真实生活测试告诉我这是真实的,因为我的SoapHeader属性在调用之间不断混淆。有没有办法确保我可以在线程中使用它并保持我的属性正确?并且确保我没有遇到一个线程在这个问题中给出的例子,当另一个线程关闭它时,它认为连接是开放的?我的请求完成后,是否需要担心肥皂标题值?我如何验证这些属性是我设置的,直到请求被发布为止?如何实现SoapHttpClientProtocol

+0

为什么不为每个线程分配一个单独的SoapHttpClientProtocol实例? – 2009-12-22 15:27:38

+0

我已经试过了,它似乎仍然好像多个请求更改服务器端的属性。即使在本地实例中,我将propeties设置为正确,当请求发生时,它最终可能会在不同调用的属性下执行。 – Alex 2009-12-22 15:31:54

+0

那么,服务器没有正确处理呢? – 2009-12-22 16:22:33

回答

1

我会问的第一件事是,如果你不使它成为多线程,你的服务能否正常工作。如果您进行后续通话,他们是否都能正常工作,并为您提供期望的结果?如果没有,那么服务器端就会出现问题。

要查看您发送的内容,您可以在soap消息发出之前序列化它。确保它正在正确生成。

我的工作阻止访问很多网站,但CodeProject有一些例子,如果我没有记错的话。

如果单线程工作有序列化层,并在多线程场景中将文件写入磁盘。然后你就可以看到什么在工作,什么不是你的代码认为它正在发送。

由于您试图建立多个连接,而您可能将您的端点看作一个值,这就像是在NAT防火墙后面一样,您的呼叫很可能会被服务器混合。这意味着你可能会得到一个连接,但你的其他线程之一首先得到它的消息。如果是这种情况,您可以尝试将每个线程放在自己的应用程序域中,看看它是否为您做了任何事情。不是说它会起作用,但不知道还有什么可以让你尝试。

+0

是的,单线程工作得很好。这就是现在运行的代码,我正在努力加快这项工作。另外两个建议我会尝试将这些调用写出来并尝试应用程序域。谢谢。 – Alex 2009-12-23 17:28:47

+0

测试另一个想法,看看它是你还是他们。创建一个简单的exe(基于控制台很好),只是不断的击中服务。创建两个版本,比如两种不同的请求类型。检查你的反应,你知道你应该得到并同时运行两个exes。它应该循环并继续重新发送,以创建音量并希望重复您的问题。如果得到不好的回应,它会失败。可能有助于消除一些途径。此外,如果它的工作,那么也许应用程序领域的事情可能会好,或者你的代码中有东西导致腐败。 – 2009-12-23 18:05:06

+0

感谢您的帮助,找出答案。现在在服务器端定义我实际上可以看到我的肥皂信息并检查它们。没有得到我的问题修正,但现在我知道要otu工作而不是修复。 – Alex 2010-01-07 13:09:08