Взаимодействие WebRequest и WebMethods - PullRequest
3 голосов
/ 13 марта 2012

VS2010, C #, .NET 4

Я создал 2 приложения: веб-сервис и приложение Windows Forms (оба работают на одном ПК).Вот код:

ВЕБ-ОБСЛУЖИВАНИЕ:

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());

ЭТО РАБОТАЕТ ТОЛЬКО В ФОРМЕ.Я получаю ответ от веб-службы, которая содержит сообщение.Теперь я изменяю приложения 2 приложений следующим образом:

ВЕБ-СЕРВИС:

public class Service1 : System.Web.Services.WebService
{

    [WebMethod]
    public string HelloWorld(string message)
    {
        return message;
    }
}

ПРИЛОЖЕНИЕ ФОРМ WINDOWS:

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());

ДАННЫЕ СБОИ ПО ЗАПРОСУ. GetResponse ();«Это говорит о том, что основная связь закрыта».Может кто-нибудь сказать мне, что не так с кодом здесь.Примечание. Я ДОЛЖЕН обращаться к веб-методам только с помощью веб-запросов.Я не хочу добавлять веб-ссылку.

1 Ответ

0 голосов
/ 13 марта 2012

Я заметил, что вы не закрываете поток запросов перед вызовом GetResponse (). Я не проверял это, но пример в документах закрывает поток запросов. В любом случае это хорошая практика, поэтому попробуйте сначала.

* 1005 Т.е. *

postdataStream.Write(byte1, 0, byte1.Length);
postDataStream.Close();
WebResponse res = req.GetResponse();
...