クライアントで使用する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」テンプレートを使用してプロジェクトを作成しました。
'http:// tempuri.org /'を 'http:// pagorecibos.pagosrecibos.com /'に変更すると、それは本質的に同等のxmlになります(つまり、インポートされた名前空間はありませんが、サービスはそのトップペイロードを受け入れるべきです) – zaitsman
あなたの問題は何ですか?エラーメッセージはありますか?他に何か? –
あなたの答えはThanxです。問題は、形式が等しくなく、「オリジナル」形式でリクエストを作成しようとするとエラーがスローされます(ごめんなさい、スペイン語です)。 System.Web.Services.Protocols.SoapException:No se puede controlarラ・ソルシテ・ス・アン・パラメロ・デ・ア・ア・ヴァリド。 SOAPに準拠したプロポーザル。 (サーバー) –