2

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

4

0 に答える 0