WSE3 Web サービスを WCF に移行しています。ただし、クライアントは WSE3 クライアントです。
すべてのオペレーション コントラクトは、MessageContract
クラスのインスタンスを返します。これは 2 つの操作で機能しますが、同じサービス コントラクトの 1 つの操作では何らかの理由で失敗します。エラーは次のとおりです。
The signature or decryption was invalid.
WCF トレース ファイルを調べると、次のことがわかりました。
The formatter threw an exception while trying to deserialize the message: Error in deserializing body of request message for operation 'MyOperationName'. End element 'Body' from namespace 'http://schemas.xmlsoap.org/soap/envelope/' expected. Found element 'MyOperationName' from namespace 'urn:MyProject:MyModule:2006:04:MyAuthorizationModule'.
私の観察では、XmlRoot
(属性を使用する代わりにMessageContract
) 属性を使用して応答クラスを装飾すると、この例外は発生しません。ただし、応答オブジェクトはデシリアライズできません。つまり、入力トレースで XML 応答を確認できますが、期待される XML 構造が一致しないため、null
クライアント側でサービス コールが返されます。
このクラスには、属性で装飾された別のクラスのインスタンスを返すMessageContract
パブリック プロパティ ( ) が 1 つだけあります。このクラス ( で装飾されている) には、プロパティを持つエンティティ クラスのオブジェクトのを与えるプロパティがあります。MessageBodyMember
XmlRoot
xmlRoot
Collection
XmlElement
チェック/検証する必要があるのはどれですか? 必要に応じて、クラスのコード スニペットを提供できます。