我有一个在.NET中使用的WCF服务。根据要求,标题中的Action元素必须为“http:// abc”,To元素必须为“ws:// xyz”才能识别和响应请求的服务。但是,操作的soapAction在WSDL中是空白的,无法更改。
我以编程方式构建的服务配置是:
我发现实现此要求的设置是“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。
答案 0 :(得分:0)
我认为由于错过了服务绑定的配置,因此未调用BeforeSendRequest。检查是否已将扩展配置添加到要获得该行为的服务端点。