0

WCFでRESTfulサービスを実装しようとしていますが、サービスが渡されたxmlを逆シリアル化できないという問題があります。ルート要素をデータコントラクトではなく操作コントラクトにマップしようとしています。たとえば、次のXMLパケットでは、

<MyObject>
  <MyField1>asdf</MyField1>
  <MyField2>1234</MyField2>
  ...
</MyObject>

MyObjectは、そのレベルでの操作コントラクトを想定しているため、入力メッセージとして逆シリアル化することはできません。

1)5つ以上のパラメーターがあり、2)拡張データの余地がないため、すべてのフィールドを操作コントラクトのパラメーターとして使用したくありません。

着信リクエストをログに記録するように動作拡張機能を設定しています。正しく逆シリアル化するために、着信メッセージをルート要素でラップする必要がありますか?または、クライアントに実装を変更させることなく、これを機能させるためのよりハッキーな方法はありますか?

ありがとう

4

1 に答える 1

1

私の解決策は、運用契約を次のように変更することでした

[OperationContract(Action="*")]
void ProcessMessage(Message message);

を使用してメッセージを逆シリアル化します

var msg = message.GetBody<MyObject>();

私の既存のDataContractで。

更新:呼び出し元のサービスがxml blob内のフィールドの順序を並べ替えることができるため、実際には逆シリアル化にXmlSerializerを使用することを選択しました。

于 2011-02-17T00:34:58.093 に答える