2010-11-25 4 views
1

言い換えれば:SOAPメッセージ(wsdlを採用)から追加の "メッセージの"ラッパーを削除するwcfサービス契約を変更するには?WCF:MessageContractAttribute.IsWrapped = false世代を強制する方法?

私は契約WCFサービスを作成している

[ServiceContract(Namespace = "http://blabla/", Name = "DiagnosticApplication")] 
    public interface IReceiveApplication 
    { 
     [OperationContract] 
     string Test(XmlElement e); 
    } 

だから私のSCは今、このようなメッセージ

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:epr="http://blabla/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <epr:Test> 
      <epr:e> 
      <anyxml/> 
      </epr:e> 
     </epr:Test> 
    </soapenv:Body> 
</soapenv:Envelope> 

を受け入れますが、レガシークライアントは、そのようなメッセージ(メッセージのEPR:レベルは逃しe)を送信します

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:epr="http://blabla/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <epr:Test> 
      <anyxml/> 
     </epr:Test> 
    </soapenv:Body> 
</soapenv:Envelope> 

私は "wsdl"をゼロから作成しました。まず、メッセージラッパーを取り除いてサンプル契約(cs)を生成しました。私は、生成されたコードが生成されたメッセージクラスの近くでMessageContract.IsWrapperd = falseを使用していることがわかりますが、生成されたコードを変更することはできません。私はどうにかして操作契約を変更し、正しいMessageContractでメッセージを生成するようにwcfに依頼する必要があります。

答えて

1

私はアイデアを持っている:

そして今、私はそれを行う方法を知っている:そのようなオプションはありません私は何とかない

<wsdl:part name="parameters" element="tns:Test"/> 

しかし

<wsdl:part name="parameters" type="xsd:any"/> 

APPENDを生成するように依頼する必要があり必要なメッセージ契約を生成するためのサービス/運用契約では、独自のクラスを作成するだけでメッセージ契約属性でマークすることができます。

[ServiceContract(Namespace = "http://blabla/", Name = "DiagnosticApplication")] 
public interface IReceiveApplication 
{ 
    [OperationContract] 
    string Test(XmlElement e); 
} 

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(IsWrapped = false)] 
public partial class MessageRequest 
{ 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace = "", Order = 0)] 
    public XmlElement parameters; 

    public RCMR_IN000004FI01Request(){} 

    public RCMR_IN000004FI01Request(XmlElement parameters) 
    { 
     this.parameters = parameters; 
    } 
} 
関連する問題