この SOAP メッセージを処理するサービスを実装する必要があります。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:serv="http://www.company.com/Service">
<soapenv:Body>
<serv:ServiceOperation xmlns="http://www.company.com/Service">
<serv:operationParam>X</serv:operationParam>
<serv:operationHeader>
<serv:headerParamA>12345</serv:headerParamA>
<serv:headerParamB>ABCD</serv:headerParamB>
...
メッセージ コントラクトは現在次のようになっています。
[MessageContract(
WrapperName = nameof(ServiceOperation),
WrapperNamespace = ServiceNamespace,
IsWrapped = true)]
public class ServiceOperation
{
[MessageBodyMember(Name = "operationParam", Namespace = ServiceNamespace)]
public string OperationParam { get; set; }
[MessageBodyMember(Name = "operationHeader", Namespace = ServiceNamespace)]
public OperationHeader OperationHeader { get; set; }
...
文字列プロパティoperationParam
は、サービスによって正しく解析されます。しかし、私が何をしても、「複合型」operationHeader
を機能させることはできません。
上記のコードでは、との宣言に関係なく、 のプロパティOperationHeader
は常に nullです。XmlType
XmlElement
[XmlType]
public class OperationHeader
{
[XmlElement]
public string HeaderParamA { get; set; }
}
XMLタイプを匿名として装飾しOperationHeader
、属性を持たないクラスのバリエーションを試しました。クラスMessageBodyMember
のすべてのメンバーでまだ nullです。OperationHeader
非常に奇妙なことは、代わりにこれを行うと:
[MessageBodyMember(Name = "operationParam", Namespace = ServiceNamespace)]
public string OperationParam { get; set; }
[MessageBodyMember(Name = "operationHeader", Namespace = ServiceNamespace)]
public XmlElement OperationHeader { get; set; }
次に、解析される XML 要素はoperationHeader
それ自体ではなく、XML の最初の子要素です。headerParamA
.
私のクラスがどのように見えるべきか知っている人はいますか?
この回答とまったく同じように実行しようとしましたが、複合型のメンバー プロパティに対しても null のみが返されます。
それとも、送信された XML が壊れているのでしょうか?