2009-02-09 150 views
1

我有一個RESTful service,我正在開發WCF。我正在公開一個沒有可序列化類型的合同,因此我使用DataContractSurrogate(IDataContractSurrogate的實現)創建可以用DataContractSerializer序列化的代理。是否可以從WCF IDataContractSurrogate實現中讀取請求標頭?

我的問題是,我如何訪問我的DataContractSurrogate類中的請求/響應頭?

在它通過簡單地使用WebOperationContext和客戶機中的相同WebOperationContext可能的服務是可以與當前的WCF信道(IContextChannel)的參考被創建的對象OperationContextScope的範圍內訪問。

我可以創建一個OperatoinContextScope如果我能夠在IDataContractSurrogate.GetDeserializedObject之內獲得對WCF通道的引用,但我不確定如何做到這一點。

任何想法?


@casperOne
我想在DataContractSurrogate執行標頭值,因爲從代理轉換爲目標類型我需要引用在工廠對象的單身庫中的條目。

事情是這樣的:

SingletonFactoryPool.Factories[factoryIdFromHeader].CreateTargetType(surrogateValues); 

我已經走過時,我需要在頭其他原因的數據,好像它是清潔,如果我可以只讀取頭中的價值。您的觀點是有效的,但我可以輕鬆地在代理人中傳遞相同的數據。

回答

0

如果您需要訪問數據合同中的頻道,我會說您的班級設計不正確。您的合同應該是自包含的,並且不依賴於通過通道傳遞消息時使用的標題值。

你總是可以創建一個擴展(有很多領域可以做到這一點),它將採取反序列化的實例,然後添加你需要添加的頭信息。

當然,你總是可以創建一個單獨的對象,它是反序列化實例(通過參數傳遞)和標題信息的混合物。

+0

更新了這篇文章,進一步闡明瞭爲什麼我試圖訪問IDataContractSurrogate實現中的頭文件。答覆是要評論 – 2009-02-09 04:14:41

相關問題