从WCF请求中删除ActivityId

Cod*_*313 9 wcf interop web-services

我在WCF客户端和Java Web服务之间存在一个有趣的兼容性问题.简而言之,我发现生成头的方式导致了问题 - 头中的ActivityId和Action元素以及WCF对自定义头的命名空间所做的事情都会导致问题.我已经使用wsdl.exe成功使用了WSDL,但是WCF似乎是以Java Web服务不喜欢的方式操作头.有没有什么办法可以为WCF客户端设置绑定,以便不发送ActivityId和Action元素?

Ric*_*ett 10

你在客户端开启了跟踪吗?我认为这就是添加活动ID,因为它试图将跟踪活动传递给服务以进行端到端跟踪.关闭活动跟踪标志,它应该去 - 请参阅我对操作标题的评论


Stu*_*tLC 5

当WCF客户端尝试连接到非WCF服务器(例如JAX-WS,Websphere等)时,通常会发生此问题.

只是为了增加Richard的救命答案并解决@ irperez的评论,ActivityId在WCF诊断跟踪期间需要禁用以阻止WCF诊断添加的实际设置是删除:

  • ActivityTracing从中移除switchvalue
  • 设置propagateActivityfalse

即改变

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing"
            propagateActivity="true">
    <listeners>
      <add name="xml"/>
    </listeners>
  </source>
...
Run Code Online (Sandbox Code Playgroud)

至:

<source name="System.ServiceModel" switchValue="Information" 
        propagateActivity="false">
  <listeners>
    <add name="xml"/>
  </listeners>
Run Code Online (Sandbox Code Playgroud)

如果ActivityId启用它,它会将以下内容注入到SOAP标头中,这会破坏毫无疑问的服务器:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <ActivityId CorrelationId="5de75017-da08-4ac2-84f2-5374953cc2a1" 
         xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">
      9f076849-e76e-4675-84c1-5026b1c2eb1a
    </ActivityId>
  </s:Header>
Run Code Online (Sandbox Code Playgroud)