VS2010、Cの#、.NET 4WebRequestクラスとWebMethodの相互運用
私は2つのアプリケーション作成:Webサービスを、Windowsが(両方とも同じPC上で実行されている)アプリケーションを構成しています。ここでは、コードです:
WEBSERVICE:
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "message";
}
}
WINDOWSアプリケーション:
HttpWebRequest req =(HttpWebRequest)WebRequest.Create("http://localhost:20848/Service1.asmx/HelloWorld");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
//Set the content type of the data being posted.
req.ContentType = "application/text";
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string txtOutput = sr.ReadToEnd();
Console.WriteLine(sr.ReadToEnd());
これは正常に動作します。私はメッセージを含んでいるWebサービスからの応答を得ます。
Webサービス:
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(string message)
{
return message;
}
}
WINDOWSフォームアプリケーションを: は今、私はこれにアプリケーション2つのアプリケーションを変更
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:20848/Service1.asmx/HelloWorld");
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
string inputData = "sample webservice";
string postData = "message=" + inputData;
byte[] byte1 = System.Text.ASCIIEncoding.ASCII.GetBytes(postData);
req.ContentLength = byte1.Length;
Stream postdataStream = req.GetRequestStream();
//Set the content type of the data being posted.
req.ContentType = "application/text";
postdataStream.Write(byte1, 0, byte1.Length);
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string txtOutput = sr.ReadToEnd();
Console.WriteLine(sr.ReadToEnd());
これは(req.GetResponseで失敗します)。 "それは、基本的な接続が閉じていると言います"。誰かがここでコードの何が間違っているか教えてもらえますか?注 - 私はWebRequestsのみでWebMethodsにアクセスする必要があります。私はWeb参照を追加したくありません。
何をやっているのですか?なぜあなたは "サービス参照の追加"を使用しませんか?新しい開発のためにASMXサービスと「Web参照の追加」を使用すべきではありません。 –
SOAPまたは "HttpPost"を実行するようにサービスが設定されていますか? –
Webサービス参照を追加できない理由を説明すると、誰かがあなたをより良く助けることができるかもしれません。実用的な立場からはほとんど意味がありません。 – kprobst