2017-12-27 32 views
0

クライアントで使用するSOAP Webサービスを作成しようとしています。SOAPリクエスト形式

ドキュメントによれば、特定の情報を返す2つのメソッドを持つWebサービスを作成する必要があります。私は問題なく作成しましたが、サンプルフォーマットに合うようにすることはできません。

長い間RESTサービスを行っていたので、私は何年もSOAPサービスを作っていなかったと言わざるを得ません。何かナンセンスがある場合は、私を許してください。

ドキュメント(良いもの)であることを例要求はこれです:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <obtenerImporte xmlns="http://tempuri.org/"> 
     <referencia>string</referencia> 
    </obtenerImporte> 
    </soap:Body> 
</soap:Envelope> 

私のサービスのコードを:私のサービスを受け取るしたい形式をだ

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pag="http://pagorecibos.pagosrecibos.com/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <pag:obtenerImporte> 
      <referencia>040</referencia> 
     </pag:obtenerImporte> 
    </soapenv:Body> 
</soapenv:Envelope> 

これは、次のとおりです。

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

public class Service: System.Web.Services.WebService 
{ 
    [WebMethod] 
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)] 
    public string ObtenerImporte(ObtenerImporte obtenerImporte) 
    { 
     return "Hola a todos"; 
    } 

    [WebMethod] 
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)] 
    public string RealizarPago(RealizarPago realizarPago) 
    { 
     return "Hola a todos"; 
    } 

} 

クラス(他のクラスが似ている):

public class ObtenerImporte 
{ 
    [XmlElement("referencia")] 
    public string Referencia { get; set; } 
} 

違いは、ノード "obtenerImporte"の名前空間と接頭辞ですが、解決できません。

VS2017 Community Editionを使用していますが、「ASP.NET Web Service」テンプレートを使用してプロジェクトを作成しました。

+0

'http:// tempuri.org /'を 'http:// pagorecibos.pagosrecibos.com /'に変更すると、それは本質的に同等のxmlになります(つまり、インポートされた名前空間はありませんが、サービスはそのトップペイロードを受け入れるべきです) – zaitsman

+0

あなたの問題は何ですか?エラーメッセージはありますか?他に何か? –

+0

あなたの答えはThanxです。問題は、形式が等しくなく、「オリジナル」形式でリクエストを作成しようとするとエラーがスローされます(ごめんなさい、スペイン語です)。 System.Web.Services.Protocols.SoapException:No se puede controlarラ・ソルシテ・ス・アン・パラメロ・デ・ア・ア・ヴァリド。 SOAPに準拠したプロポーザル。 (サーバー) –

答えて

0

問題を解決しました!!!コードの追加と削除....突然動作します:D。サービスを定義するための正しい方法は、この(あなたの手掛かりに感謝の@zaitsman)である:

[WebService(Namespace = "http://pagorecibos.pagosrecibos.com/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

public class Service : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [SoapDocumentMethod(Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)] 
    public string ObtenerImporte(ObtenerImporte obtenerImporte) 
    { 
     return "Obtener Importe"; 
    } 

    [WebMethod] 
    [SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)] 
    public string RealizarPago(RealizarPago realizarPago) 
    { 
     return "Realizar Pago"; 
    } 
} 

私はこのソリューションは、他のものを助けることができることを願っています。