Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Soap WCF中的自定义标头_Soap_Wcf_Wcf Binding - Fatal编程技术网

Soap WCF中的自定义标头

Soap WCF中的自定义标头,soap,wcf,wcf-binding,Soap,Wcf,Wcf Binding,我想在我的wsdl上为传入的soap消息添加特定的自定义头,因此我将所需的标记添加到web.config的头节点中,如下所示: <headers> <Tag>Value</Tag> </headers> 价值 但是,如果自定义标记中的“Value”设置为“Value”,那么当我更改此值时,服务会将其踢出,并给出以下错误,则此操作可以正常工作 'DestinationUnreachable-由于EndpointDispatcher上的

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

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

价值
但是,如果自定义标记中的“Value”设置为“Value”,那么当我更改此值时,服务会将其踢出,并给出以下错误,则此操作可以正常工作

'DestinationUnreachable-由于EndpointDispatcher上的AddressFilter不匹配,无法在接收方处理收件人为“”的消息。检查发送方和接收方的端点地址是否一致。”

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

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

{此处的变量值}
有什么想法吗,还是我走错了方向?我不想使用messageContract,因为我们使用RPC样式的soap而不是文档样式

另一件奇怪的事情是,为了使消息有效,header元素中定义的自定义必须使用ws-addressing命名空间指定“IsReferenceParameter=“true”属性,否则会引发上述错误

 <Tag a:IsReferenceParameter="true">Value</Tag>
谁能给我解释一下吗

提前谢谢


Jon

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

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

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

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

这展示了如何通过实现一个定制的“WsdlExporter”类将定制的SOAP头注入到正在生成的WSDL中——也许这就是您的方法

如果你只是用谷歌搜索的话,就可以获得更多的资源——这是一个非常常见的场景,很多人已经用很多方法实现了它,有一些巧妙的解决方案,并在博客上发表了相关文章——你应该可以毫不费力地找到所有答案


Marc

我希望在服务端需要一个自定义的头,并使用头标记在WSDL文档中显示标记。你知道为什么我不能在web.config中的自定义标记中使用变量值吗?JonAh好的,对不起,我没有理解“在WSDL中需要标头”部分。对不起,我不知道如何将变量名指定为占位符。恐怕我看到的在合同中描述SOAP头的唯一解决方案就是使用MessageContract。这正是它的目的。嗨,抱歉,我认为我没有很好地解释它,在自定义标记节点中,我不想指定变量,我希望内容是我希望的任何内容,而不仅仅是“值”。例如:somevalue另一个值当我尝试传递除“Value”以外的任何数据时,我在第一篇文章中定义了错误。您在web.config中的具体位置指定了这些标题?请在服务标记-Value中说明您从何处了解到这一点。我想你可能误解了你读到的东西。