この 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です。XmlTypeXmlElement
[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 が壊れているのでしょうか?