Веб-служба .NET получает запрос HTTP POST (500) Внутренняя ошибка сервера - PullRequest
3 голосов
/ 15 ноября 2010

В настоящее время я пишу веб-сервис на C #, который имеет несколько методов, один из которых должен получать запросы HTTP POST.Первое, что я сделал, изменил файл web.config в проекте веб-службы, как показано ниже.

<webServices>
  <protocols>
    <add name="HttpSoap"/>
    <add name="HttpPost"/>
    <add name="HttpPostLocalhost"/>
    <add name="Documentation"/>
  </protocols>
</webServices>

Я могу запустить веб-службу локально, и когда я нажимаю на метод в браузере, я могусмотрите, он обрабатывает HTTP-запросы POST и принимает args = string, так как моя сигнатура веб-метода принимает один строковый параметр с именем args.Затем я тестирую это через тестовое приложение ASP.NET, используя приведенный ниже код для запуска HTTP-запроса POST.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ConfigurationManager.AppSettings["PaymentHubURL"].ToString());

request.KeepAlive = false;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";

StringBuilder sb = new StringBuilder();
sb.Append("message_type=");
sb.Append(HttpUtility.UrlEncode("Txn_Response"));

byte[] bytes = UTF8Encoding.UTF8.GetBytes(sb.ToString());
request.ContentLength = bytes.Length;
using (Stream postStream = request.GetRequestStream())
{
    postStream.Write(bytes, 0, bytes.Length);
}

string test;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
     StreamReader reader = new StreamReader(response.GetResponseStream());

     test = reader.ReadToEnd();
}

Но когда я запускаю это, я получаю "Удаленный сервер вернул ошибку: (500)Внутренняя ошибка сервера".Если я удаляю параметр, удаляя stringbuilder и байт-код, а также не имея параметров в веб-сервисе, он работает.Так что это, очевидно, проблема с параметрами.Я на самом деле хочу отправить больше данных и использовал параметр string [] в веб-сервисе, но это также не удалось.

Может кто-нибудь помочь ??

Ответы [ 2 ]

2 голосов
/ 08 ноября 2011

Я бы посоветовал вам пересмотреть свой подход. Microsoft написала довольно классные библиотеки для использования веб-сервисов, но есть два способа сделать это - «добавить веб-ссылку» и «добавить сервисную ссылку».

В вашем случае, похоже, у вас есть «веб-сервис asmx», поэтому я бы рекомендовал вам добавить «веб-ссылку» в ваш проект в visual studio. Это предполагает, что вы используете визуальную студию.

После того, как вы добавите эту веб-ссылку, вы можете создать своего клиента, «добавив» его. Вы можете выполнить любой веб-метод на этом клиенте. Это самый простой способ использовать веб-сервисы. Вам не нужно иметь дело с http осложнениями.

Надеюсь, это поможет.

0 голосов
/ 15 ноября 2010

Я могу догадаться, что вы неправильно формируете запрос HttpPost.

Попробуйте использовать код, показанный по ссылке ниже, для создания запроса:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

Или, возможно, ответ не содержит значения символа Юникода

, попробуйте скопировать и вставить этот код, чтобы получить ответ

 System.Text.Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
    StreamReader objSR;

webResponse = (HttpWebResponse)response.GetResponse();
StreamReader reader = webResponse.GetResponseStream();
objSR = new StreamReader(objStream, encode, true);
sResponse = objSR.ReadToEnd();
...