2009-08-07 60 views
1

,我想在我的WSDL传入的SOAP消息中添加特定的自定义页眉,所以我已经添加所需变量到web.config中的像下面的头节点:自定义页眉在WCF

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

不过,如果在我更改此值时服务启用了自定义标记中的“值”设置为“值”,则会出现以下错误;

'DestinationUnreachable - 由于EndpointDispatcher中的AddressFilter不匹配,无法在接收方处理To'http://localhost:3537/Service1.svc'的消息。检查发件人和收件人的EndpointAddresses是否同意。

那么如何指定标签间实际值的变量值?像在url模板中,即

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

任何想法,或者我是否以错误的方式去了解自定义标题?我不想使用messageContract,因为我们在文档样式上使用RPC样式的soap。

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

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

任何人都可以向我解释这一点吗?

在此先感谢

乔恩

+0

请说你在哪里了解到这一点。我想你可能误解了你读的东西。 – 2009-08-10 23:50:44

回答

2

我真的不能说明你有具体问题 - 但通常,你会添加自定义页眉到WCF在代码中调用,通常使用的行为,而不是从web.config中。不确定这是否真的有效。

当然,您的自定义标头行为可以做的是读取它从配置文件或数据库表或其他内容发送的值。但是如果你真的想在你的消息中强制使用SOAP标头,我认为你最好的选择就是使用消息契约。为什么你不能或不想使用消息合约?这实际上是消息协定的唯一目的:定义明确的SOAP消息布局,包括自定义标头。

参见主题的一些文章和博客文章:

这个blog post here显示了如何通过实现一个自定义的“WsdlExporter”类将自定义SOAP头部注入到正在生成的WSDL中 - 也许这是您的方式?

如果你只是谷歌的话,还有更多的资源可用 - 这是一个非常常见的情况,很多人已经用很多方式实现了它,并且有一些巧妙的解决方案,并且对它进行了博客 - 你应该有没有问题找到所有的答案!

马克

+0

我想在服务端要求自定义标题,并使用标题标记在WSDL文档中显示标记。你有什么想法,为什么我不能在web.config中的自定义定义标签中有变量值? Jon – Jon 2009-08-08 07:44:32

+0

好吧,对不起,我没有注意到“需要WSDL中的头文件”部分。我不知道如何指定一个变量名作为占位符,对不起。我担心在合约中描述SOAP标头的唯一解决方案确实使用了MessageContract。这正是它的目的。 – 2009-08-08 08:29:10

+0

嗨,对不起,我不认为我已经解释得很好,在自定义标签节点中,我不想指定一个变量,我想要的内容是任何我希望它不只是'价值'。例如: someValue中 anotherValue 当我尝试通过比“值”之外的任何数据,我得到我的第一篇定义的错误。 – Jon 2009-08-08 09:34:48