2009-08-07 89 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