5

Webサービスのメソッド名とURLを指定して、WebサーバーからWebメソッドを呼び出すことができる関数を作成しようとしています。ブログで、1つの詳細を除いてこれをうまく行うコードを見つけました。リクエストXMLも提供する必要があります。ここでの目標は、Webサービス自体からリクエストXMLテンプレートを取得することです。ブラウザでWebサービスのURLにアクセスすると、要求と応答の両方のXMLテンプレートが表示されるため、これはどういうわけか可能であると確信しています。

これは、プログラムでwebmethodを呼び出すコードです。

XmlDocument doc = new XmlDocument();
//this is the problem. I need to get this automatically
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
Stream stm = req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponse resp = req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
Console.WriteLine(r.ReadToEnd());
4

2 に答える 2

2

上記のコメントに続いて。サービスを説明するWSDLファイルがある場合は、これをWebサービスとの通信に必要な情報として使用します。

プロキシクラスを使用してサービスプロキシと通信することは、HTTPおよびXMLの基礎となる配管から自分自身を抽象化する簡単な方法です。

実行時にこれを行う方法はいくつかあります。基本的に、プロジェクトにWebサービス参照を追加するときにVisualStudioが生成するコードを生成します。

このニュースグループの質問に基づいたソリューションを使用しましたが、他にも例があります。

于 2010-06-04T12:40:27.730 に答える
0

参考までに、コードにusingブロックがありません。次のようになります。

XmlDocument doc = new XmlDocument();
//this is the problem. I need to get this automatically
doc.Load("../../request.xml"); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost/dummyws/dummyws.asmx?op=HelloWorld");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";

using (Stream reqstm = req.GetRequestStream())
{
    doc.Save(reqstm);
}

using (WebResponse resp = req.GetResponse())
{
    using (Stream respstm = resp.GetResponseStream())
    {
        using (StreamReader r = new StreamReader(respstm))
        {
            Console.WriteLine(r.ReadToEnd());
        }    
    }
}
于 2010-06-08T21:25:30.893 に答える