2009-11-06 176 views
0

我正嘗試僅使用由用戶提供的一組參數創建消息,並通過從WCF中的OperationDescription對象中提取輸入消息解決了MessageDescription。從消息描述中創建消息

看起來很簡單,但我似乎無法找到關於如何使用Body.WrapperElementName和MessageDescription中描述的各種消息部分的設置的信息。

是否有任何WCF專家可以幫助我瞭解這個相當複雜的問題?

回答

0

我不認爲這個功能實際上是直接暴露出來的。

我還沒有試過這個,但花了一點時間用反射器,如果你不介意弄髒你的手並使用一點思考,一個選項可能是使用Activator.CreateInstance()創建一個新的System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter類的實例,它實現IClientMessageFormatter接口。

下面是構造函數的參數:

  • OperationDescription描述
  • DataContractFormatAttribute dataContractFormatAttribute
  • DataContractSerializerOperationBehavior serializerFactory

請注意,在任何情況下,你需要充分OperationDescription對象,但看起來你無論如何都可以訪問它。

然後,這只是要求SerializeRequest()。

+0

感謝您的指點。我會嘗試一下。而且由於我使用動態,它已經很慢,所以更多的思考應該不重要;) – 2009-11-08 12:48:28

+0

嘗試它,它有點作品。目前它失敗了,因爲我在DynamicObject派生類中使用了錯誤的參數類型和返回類型,但我到了那裏。我可以創建一個新類型的實例並使用它來序列化我的操作的參數。 – 2009-11-08 16:27:14

0

如果您可以創建一個[MessageContract]類型來表示消息,那麼您可以使用TypedMessageConverter類。

或者,您可能可以使用DataContractSerializerOperationBehavior執行此操作。你需要'扼殺'一些存根,比如OperationDescription。

在學習MessageDescription本身和各種參數方面,我建議創建一個[ServiceContract]接口,就像你想看到的一樣,然後使用ContractDescription.GetContract加載ContractDescription並檢查MessageDescriptions對象。你可以看到WCF使用什麼默認設置等等。

如果您有關於特定屬性的問題,我可能會提供幫助。