WCF消息:To元素更改中的协议

时间:2012-11-04 19:58:26

标签: wcf web-services soap soapheader endpointbehavior

我有一个在.NET中使用的WCF服务。根据要求,标题中的Action元素必须为“http:// abc”,To元素必须为“ws:// xyz”才能识别和响应请求的服务。但是,操作的soapAction在WSDL中是空白的,无法更改。

我以编程方式构建的服务配置是:

  • 文本消息编码与Soap11信封版本和WSAddressing10寻址版本
  • 的绑定
  • 没有安全措施
  • http传输绑定

我发现实现此要求的设置是“ws:// xyz”作为端点URL,并且在BeforeSendRequest中使用添加的端点行为添加的消息检查器将Request.Headers.Action设置为“http:// abc”终点。然后我还附上一个ClientViaBehavior,其URL为“http:// abc”。

在我的开发机器上,这会导致

<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。

1 个答案:

答案 0 :(得分:0)

我认为由于错过了服务绑定的配置,因此未调用BeforeSendRequest。检查是否已将扩展配置添加到要获得该行为的服务端点。