1

我有一个 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。

4

1 回答 1

0

我认为 BeforeSendRequest 不被称为服务绑定的未命中配置。检查您是否已将扩展配置添加到您希望具有该行为的服务端点。

于 2012-11-06T10:56:28.900 回答