Streamwriter пишет, но дает веб-исключение - PullRequest
0 голосов
/ 15 июня 2009

Я пытаюсь вставить данные через веб-сервис. Код ниже записывает в базу данных; однако, у меня есть ошибка (см. внизу). Что здесь не так? и как это исправить?

//Create the web request
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

//Set type to POST
request.Method = "POST";
request.ContentType = "text/XML";

// Write data  
using (StreamWriter postStream = new StreamWriter(request.GetRequestStream()))
{
     postStream.WriteLine("<biz_in><phone_no>+1604333333</phone_no></biz_in>");
     postStream.Dispose();
}

Ошибка:

System.Net.WebException был обработан Сообщение = "Запрос был прерван: запрос был отменен." Источник = «Система» Трассировки стека: в System.Net.ConnectStream.CloseInternal (логический internalCall, логический прерывание) в System.Net.ConnectStream.System.Net.ICloseEx.CloseEx (CloseExState closeState) в System.Net.ConnectStream.Dispose (логическое удаление) в System.IO.Stream.Close () в System.IO.StreamWriter.Dispose (логическое удаление) в System.IO.StreamWriter.Close () в ConsoleApplication1.Program.Main (String [] args) в C: / Program Files / Program.cs: строка 62 в System.AppDomain.nExecuteAssembly (сборка сборки, аргументы String []) в System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()

Ответы [ 4 ]

1 голос
/ 29 июня 2012

Возможно, вы захотите увеличить время ожидания запроса.

У меня была та же проблема, когда я пытался загрузить 26-мегабайтный файл кусками, и он завершался с той же ошибкой. Я увеличил тайм-аут, и он успешно опубликовал его. (Я имел дело с амазоном).

1 голос
/ 15 июня 2009

StreamWriter закрывает основной поток при его удалении.

0 голосов
/ 15 июня 2009

Если вы получили указание установить MIME-тип на text / XML; Я бы предположил, что ваш сервер ожидает отправки правильного XML в теле сообщения.

Содержимое, которое вы имеете в своем примере, а именно эта строка:

postStream.WriteLine("+1604333333");

... не будет считаться действительными данными XML.

Попробуйте отправить действительный документ XML и посмотрите, что из этого получится. Вот минимальный документ, который вы можете отправить. В результате отправки вы должны получить другую ошибку.

postStream.WriteLine("<?xml version=\"1.0\"?><test />");
0 голосов
/ 15 июня 2009

Включить это:

request.KeepAlive = false;

Это будет работать, но, вероятно, повлечет за собой снижение производительности, поскольку не будет повторного использования (также известного как HTTP конвейерная передача) TCP-соединений. TCP-соединения теперь закрываются немедленно и открываются при каждом HTTP-запросе.

...