1

VS の「Web 参照を追加...」機能を使用するのではなく、XML を Web サービスに直接投稿しようとしています。これには正当な理由があります。適切なテスト XML を取得するために、標準の Web 参照を使用して生成されたものをログに記録しました。この質問で見つけたものを使用しました ASP.NET ASMX WebサービスへのSOAPリクエストのキャプチャ

Web サービスは、Visual Studio で新しい Web サービスを作成したときに生成されるものであり、特別なことではありません。

XML自体を試して渡すために、この質問クライアントからコードを借りてSOAPリクエストを送信し、応答を受け取りました

残念ながら、これを呼び出すと、「リモート サーバーがエラーを返しました: (500) 内部サーバー エラー」と表示されます。このように同じ Web メソッドを呼び出すと 100%

WebService1 ws = new WebService1();
String output = ws.HelloWorld();

その後、すべてがうまく機能するので、サービスがデプロイされたときにうまく機能していることがわかります。私が間違っていることについてアドバイスをいただければ幸いです=)

これが私のコードです:

var _url = "http://localhost/simulator/webservice1.asmx";
var _action = "http://localhost/simulator/webservice1.asmx?op=HelloWorld";

String soapMessage = soapMessage = @"<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><soap:Body><HelloWorld xmlns='http://tempuri.org/' /></soap:Body></soap:Envelope>";

XmlDocument soapEnvelop = new XmlDocument();
soapEnvelop.LoadXml(soapMessage);

XmlDocument soapEnvelopeXml = soapEnvelop;

HttpWebRequest webRequest = CreateWebRequest(_url, _action);
InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

// begin async call to web request.
IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

// suspend this thread until call is complete. You might want to
// do something usefull here like update your UI.
asyncResult.AsyncWaitHandle.WaitOne();

// get the response from the completed web request.
string soapResult;
using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
{
  soapResult = rd.ReadToEnd();
}
4

0 に答える 0