web-dev-qa-db-ja.com

ASP.NETでSOAP Webサービスを使用する

私はSOAP WSDL(ここにあります: https://portal.bsh-partner.com/picenter/server/a2a/ ))を持っていて、消費しようとしていますWebサービス。

var soapEnvelope = string.Empty;
soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
soapEnvelope += "<soapenv:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:q0=\"http://thexmlhost.com\">";
soapEnvelope += "<q0:Connect>";
soapEnvelope += "<q0:Username>username</q0:Username>";
soapEnvelope += "<q0:Password>password</q0:Password>";
soapEnvelope += "</q0:Connect>";
soapEnvelope += "</soapenv:Body>";
soapEnvelope += "</soapenv:Envelope>";

var xmlHttp = new MSXML2.ServerXMLHTTP40();
xmlHttp.open("POST", "https://thexmlhost.com/", "", "");
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
xmlHttp.setRequestHeader("SOAPAction", "thexmlhost.com/");

xmlHttp.send(soapEnvelope);

xmlHttp.waitForResponse(500);

var outXml = xmlHttp.responseText;

応答は、一般的なHTTP応答エラーページを返し続けます。 Webサービスから適切な応答を返すために、Soap Envelopeをどのように渡す必要があるかについて何か考えはありますか?

11
Lawrence

WSDLを使用している場合は、Visual Studioでサービス参照を作成すると、プロキシクラスが生成されます。私があなたの質問にいくつかの細かい点を見逃していない限り、実装と使用ははるかに信頼性が高く、はるかに簡単です。

お役に立てば幸いです。

22

サーバー側でこのコードを使用していることに気づきました。


これは、.NETでWebサービスを利用する方法ではありません。 Visual Studioの[サービス参照の追加]コマンドを使用して、サービスを非常に簡単に利用できるようにするプロキシクラスを作成します。

例については、 Webサービスの利用方法 および http://msdn.Microsoft.com/wcf/ を参照してください。

また、neverは、XMLを操作するときに文字列操作手法を使用します。簡単に言うと、文字列とXMLのルールは異なります。 .NETにはXMLを操作するためのいくつかのXMLAPIがあり、それらはすべてルールを知っています。

9
John Saunders

コードを一瞥するだけで、body開始タグを追加するのを忘れたようです:<soapenv:Body>

メッセージを手動で作成する特別な理由がない限り、Visual Studio2008以降に付属のsvcutil.exeツールを使用して生成されたプロキシを使用することを強くお勧めします。 (このツールは、「サービス参照の追加」機能を使用する場合、Visual Studioによって自動的に使用されます)Webサービスとの通信を処理するためにWCFを使用することに問題がないことを前提としています。

または、Visual Studio2005を使用して.Net2.0で開発している場合など、何らかの理由でWCFを使用できない場合は、「サービス参照の追加」機能を使用できませんが、VisualStudioを使用できます。 Webサービスのプロキシを生成するための古い「Web参照の追加」機能。この機能は、svcutil.exeではなくwsdl.exeツールを使用します。

それ以外の場合、SOAPメッセージを手動で作成するこのアプローチを本当に続行する必要がある場合は、作成されたメッセージをより簡単に分析できるように、少なくともアプリケーションにログを追加することをお勧めします。何かがおかしい。