我有一个 WCF 服务可以在 .NET 中使用。根据要求,标头中的 Action 元素必须是“http://abc”,To 元素必须是“ws://xyz”,以便服务识别和响应请求。然而,该操作的 soapAction 在 WSDL 中是空白的,并且无法更改。
我以编程方式构建的服务配置是这样的:
- 文本消息编码绑定与 Soap11 信封版本和 WSAddressing10 寻址版本
- 无证券投标
- http传输绑定
我发现实现此要求的设置是“ws://xyz”作为端点 URL,并且 Request.Headers.Action 在 BeforeSendRequest 中使用使用附加到端点的端点行为添加的消息检查器设置为“http://abc”。然后我还附加了一个带有“http://abc”URL 的 ClientViaBehavior。
在我的开发机器上,这会根据需要引起
<a:Action>http://abc</a:Action>
<a:To>ws://xyz</a:To>
但是在它生成的测试服务器上
<a:Action>http://abc</a:Action>
<a:To>http://xyz</a:To>
我不知道服务器的确切配置,但我相信它是 Windows 服务器,就像我的开发盒一样。相同的代码是否会在两台不同的机器上生成不同的消息,或者我将如何实现这一点?我还应该说它工作了几个星期并在上周一停止了。
我后来发现了以下内容:测试服务器上有 .NET 4.5 以及我尝试过的另一台机器(也失败了)。它工作正常的开发机器上只有.NET 4.0,这表明它可能与它有关。但是我没有证据表明它是由 .NET 4.5 引起的,因为它是在问题出现前几周安装的。此外,自从它停止工作以来,没有任何 Windows 更新!我还尝试在我的 ClientMessageInspector 实现中设置 To 元素,但协议仍然被翻转为 http。