2012-02-28 13 views
0

私のサービスは、SOAPボディ内のルート要素として 'log-entry'を持つアクションILogging/LogMessageに対するSOAPリクエストを解析することになっています。そのためには、LogMessageRequest型のパラメータを予期するメソッドLogMessageがあります。2つのアクションで同じメッセージコントラクトを共有する

LogMessageRequestがログエントリとしてWrapperNameで設定MessageContractの属性があります。私はまた、SOAPボディのルート要素として「ログ・エントリ」でアクションILogging /たlogExceptionのための別のSOAPリクエストを期待してい

[MessageContract(WrapperName = "log-entry")] 
public class LogMessageRequest 
{ 
    ... 
} 

を。そのためには、メソッドLogExceptionとタイプLogExceptionRequestのparamがあります。

両方のSOAPアクションの違いは、 'log-entry'内の子要素 ​​'message'が異なることです(LogMessageの場合、 'message'は文字列であり、例外では複雑なエンティティです)。

問題: LogMessageRequestとLogExceptionRequestの両方に同じラッパー名(log-entry)があるため、「LogMessageによって既にエクスポートされたログエントリ」というLogExceptionからの例外が発生します。

両方とも同じリクエストクラスを使用していて、タイプオブジェクトの 'message'を持っていました。しかし、それはうまく動作しません。

任意のポインタ? (途中でSOAP要求を変更する範囲はありません)。

答えて

0

異なるスキーマを共通のインターフェイスに一致させる方法があるかもしれませんが、より賢明な方法を提案します。サービスインターフェイスの1つを介してアダプタを構築し、他のインターフェイスと一致させます。

このようにして、醜さが分離され、アプリケーションは1つのサービスインターフェイスでのみ動作する必要があります。

0

説明からMessageContract/data contractを使用してこれを実装できるとは思いません。 XmlSerializer属性を使用してそれを行うことができるかもしれませんが、操作規約でMessageクラスを使用し、メッセージxmlを調べてどちらがどれであるか把握する必要があるようです。 WSDL/SOAP定義の関連ビットを投稿できますか?

関連する問題