Punit Belani Ответов: 3

Ошибка веб-публикации "запрос был прерван: запрос был отменен."


код:
req = System.Net.WebRequest.Create(uri);
        req.Credentials = System.Net.CredentialCache.DefaultCredentials;
        req.Proxy.Credentials = CredentialCache.DefaultCredentials;

        req.Method = "POST";
        req.Timeout = 2139999999;
        req.ContentType = "text/xml";       
        string text = XMLString;//Xml string
        req.ContentLength = text.Length + 1000;
        System.IO.StreamWriter writer = new System.IO.StreamWriter(req.GetRequestStream());
        writer.WriteLine(text);
        writer.Close();
        rsp = req.GetResponse();
        System.IO.StreamReader reader = new System.IO.StreamReader(rsp.GetResponseStream());
        string rp = reader.ReadToEnd();
        reader.Close();

верните мне веб исключение:
System.Net.WebException was caught
  Message=The request was aborted: The request was canceled.
  Source=System
  StackTrace:
       at System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting)
       at System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
       at System.Net.ConnectStream.Dispose(Boolean disposing)
       at System.IO.Stream.Close()
       at Ping.FormPostType(String uri, String buyerid) in c:\Inetpub\wwwroot\TestIceBlue\Ping.aspx.cs:line 545
       at Ping.FirstTask(String i, String uri, String buyerid, String PostT, String ResponseT) in c:\Inetpub\wwwroot\TestIceBlue\Ping.aspx.cs:line 325
  InnerException: System.IO.IOException
       Message=Cannot close stream until all bytes are written.
       Source=System
       StackTrace:
            at System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting)

Пожалуйста, помогите, как я могу разрешить это исключение?


Я также пытаюсь использовать приведенный ниже код, но все равно он выдает мне ошибку "запрос был прерван: запрос был отменен.":

HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri); Request.Credentials = System.Net.CredentialCache.DefaultCredentials; Request.Proxy.Credentials = CredentialCache.DefaultCredentials; Request.Timeout = 2139999999; 
Request.Method = "POST"; 
Request.ContentType = "application/x-www-form-urlencoded"; 
ASCIIEncoding AscTest = new ASCIIEncoding(); 
Byte[] PostData = AscTest.GetBytes(sQryString); 
Request.ContentLength = PostData.Length + 1000; 
Request.KeepAlive = false; 
System.IO.Stream RequestStream = Request.GetRequestStream(); RequestStream.Write(PostData, 0, PostData.Length); 
RequestStream.Close(); 
System.IO.StreamReader Reader = new StreamReader(Request.GetResponse().GetResponseStream()); 
String ResultHTML = Reader.ReadToEnd();

Dalek Dave

Отредактировано для блока кода.

3 Ответов

Рейтинг:
28

J a a n s

Похоже, что запись данных в поток запросов не является правильной. Попробуйте выполнить следующие действия.

1. ContentType может быть 'application/x-www-form-urlencoded'
2. Преобразования XMLString к массиву байтов.
3. ContentLength должна быть длина массива.
4. Запишите массив байтов вместо строки.


Punit Belani

хорошо, теперь я пытаюсь с нижеприведенным кодом, но все равно он дает мне ошибку "запрос был прерван: запрос был отменен.":

HttpWebRequest Request = (HttpWebRequest)WebRequest.Создать(uri);
Запрос.Учетные Данные = System.Net.CredentialCache.Свойство defaultcredentials;
Запрос.Полномочие.Учетные Данные = CredentialCache.Свойство defaultcredentials;
Запрос.Тайм-аут = 2139999999;
Запрос.Метод = "сообщение";
Запрос.ContentType = "application/x-www-form-urlencoded";

ASCIIEncoding AscTest = новое ASCIIEncoding();
Byte[] PostData = AscTest.Метод getbytes(sQryString);
Запрос.ContentLength = PostData.Длина + 1000;
Запрос.Сообщения keepalive = ложь;
Системы.ИО.RequestStream Трансляция = Запрос.Метод getrequeststream();
RequestStream.Write(PostData, 0, PostData.Длина);
RequestStream.Закрывать();
Системы.ИО.Что streamreader читатель = новый поток streamreader(запрос.Метод GetResponse().GetResponseStream());
Строка ResultHTML = Reader.ReadToEnd();

J a a n s

Попробуйте назначить запрос.ContentLength как PostData.Длина (нет необходимости увеличивать ее на 1000)

Punit Belani

чем это дает мне "удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера"

J a a n s

В этом случае ваш целевой сайт не сможет должным образом обработать запрос. Вы создали этот сайт? Если да, попробуйте отладить его и найти проблему с сервером.

Punit Belani

когда я вручную копирую строку PostData на вкладку url браузера, она дает прекрасный ответ.. но не с помощью кода. почему???
пожалуйста, помогите ... я застрял..

J a a n s

копирование вручную? Тогда ваша страница может быть ожидая, что GET-запрос, т. е. строки запросов.

Punit Belani

когда я пытаюсь получить запрос, он дает мне что-то другое. "Вы не можете использовать этот тип глагола"

J a a n s

При использовании метода GET вы не должны получать поток запросов. Вы должны передать все детали как сам url-адрес (например www.abc.com/abc.aspx?id1=val1 ). Для получения более подробной информации пожалуйста обратитесь к статье http://www.codeproject.com/KB/webservices/HttpWebRequest_Response.aspx

Dalek Dave

мудрый Совет.

Рейтинг:
1

thatraja

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

Устранение Неполадок “Отмененный Веб-Запрос” [^]

.NET, HttpWebRequest.KeepAlive И ServicePoint.ConnectionLimit [^]

Одновременные вызовы веб-служб .NET 2.0 выдают ошибку “запрос был прерван: запрос был отменен".[^]


Espen Harlinn

Хорошие дополнения, мои 5

Рейтинг:
1

Ramalinga Koushik

Просто отключите HTTP, оставайтесь в живых для отправки запросов.


Punit Belani

Теперь это дает мне ошибку:
Удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера

[no name]

Надежда http://forums.iis.net/t/1152487.aspx ссылка может помочь вам решить вашу проблему.