1

我想在我的 wsdl 上为传入的肥皂消息添加特定的自定义标头,因此我已将所需的标签添加到 web.config 的标头节点中,如下所示:

 <headers>
   <Tag>Value</Tag>
 </headers>

但是,如果自定义标签中的“值”设置为“值”,则当我更改此值时服务将其踢出并给出以下错误,则此方法可以正常工作;

'DestinationUnreachable -由于 EndpointDispatcher 的 AddressFilter 不匹配,接收方无法处理带有“ http://localhost:3537/Service1.svc ”的消息。检查发送方和接收方的 EndpointAddresses 是否一致。

那么如何为标签之间的实际值指定变量值?就像在 url 模板中一样

 <headers>
   <Tag>{variable value here}</Tag>
 </headers>

有什么想法,还是我以错误的方式处理自定义标题?我不想使用 messageContract,因为我们使用 RPC 样式肥皂而不是文档样式。

另一个奇怪的事情是,要使消息有效,标题元素中定义的自定义必须指定带有 ws-addressing 命名空间的“IsReferenceParameter="true"' 属性,否则会引发上述错误?

 <Tag a:IsReferenceParameter="true">Value</Tag>

谁能给我解释一下?

提前致谢

乔恩

4

1 回答 1

2

我无法真正解释您的具体问题 - 但通常,您会在代码中将自定义标头添加到 WCF 调用中,通常使用行为,而不是来自 web.config。不确定这是否有效,真的。

当然,您的自定义标头行为可以做的是读取它将从配置文件或数据库表或其他东西发送的值。

但是,如果您真的想在消息中强制执行 SOAP 标头,我认为您最好的选择确实是使用消息协定。为什么你不能或不想使用消息合约?这确实是消息契约的唯一目的:定义显式 SOAP 消息布局,包括自定义标头。

请参阅有关该主题的一些文章和博客文章:

此处的这篇博客文章展示了如何将自定义 SOAP 标头注入到通过实现自定义“WsdlExporter”类生成的 WSDL 中——也许这就是你要走的路?

如果你只是用谷歌搜索它,还有更多可用的资源——这是一个非常常见的场景,很多人已经以多种方式实现了它,有一些巧妙的解决方案,并在博客上发布了它——你应该可以毫不费力地找到所有答案就在那里!

马克

于 2009-08-07T20:24:58.270 回答