Я пытаюсь вызвать веб-сервис (.asmx) из приложения ac # в формате json.
Когда я указываю метод запроса как GET и не указываю contentType.
(требуется HttpWebRequest)
req.Method = "GET";
Все работает хорошо, но я получаю XML-ответ.
Когда я указываю Тип содержимого:
req.ContentType = "application/json; charset=utf-8";
Я получаю
500 внутренняя ошибка сервера.
Когда я меняю метод запроса:
req.Method = "POST";
Я могу вызывать только беспараметрические методы, которые правильно возвращают json,но если я попытаюсь вызвать метод с параметрами, я снова получу ошибку 500.
Код веб-службы:
[WebMethod(EnableSession =true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string SimplestWebService()
{
return "hello";
}
И с параметрами:
[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Echo(string aString)
{
return aString;
}
Любые идеи будут высоко оценены.
Добавлено: Возможно, я неправильно пишу запрос POST (сейчас я отправляю его в заголовке, как запрос GET).Может кто-нибудь, пожалуйста, наставить меня на это?
Добавлен режим: Веб-сайт действительно помечен как скрипт:
[ScriptService]
public class MyAPI : System.Web.Services.WebService
И вот как я строю свой запрос POST (я действительно склонен полагать, что этопроблема):
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(methodUrl.ToString());
req.Method = "POST";
req.Headers.Add("aString","oren");
req.ContentLength = 0;
...
req.ContentType = "application/json; charset=utf-8";
req.Accept = "application/json; charset=utf-8";
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader sr = new StreamReader(res.GetResponseStream());
result.Append(sr.ReadToEnd());
}
...
Также пробовал:
req.Method = "POST";
string postData = "aString=kjkjk";
req.ContentType = @"application/json; charset=utf-8";
req.Accept = @"application/json; charset=utf-8";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
req.ContentLength = byte1.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(byte1, 0, byte1.Length);
newStream.Close();
Два последних замечания:
1. Этот веб-сервис работает в XML с использованием браузера.
2. Запрашиваемаяjson, код никогда не достигает точки останова в веб-сервисе .Так что, возможно, это проблема IIS (я использую IIS 6.1).Я попробовал рекомендацию типа MIME здесь .
Большое спасибо.