У меня есть веб-сервис, который создает пакет JSON (или что вы хотите назвать его), как это:Потребляя WebService из консольного приложения
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void MyMethod(string letters, int number)
{
try
{
Dictionary<string, object> result = new Dictionary<string, object>();
//Do some stuff here
result.Add("data1", 1);
result.Add("data2", "second value");
JavaScriptSerializer s= new JavaScriptSerializer();
Context.Response.Clear();
Context.Response.ContentType = "application/json; charset=utf-8";
Context.Response.Flush();
Context.Response.Write(s.Serialize(result));
}
catch (Exception ex)
{
}
}
Когда я проверить это я получаю хороший ответ вроде следующие: {"data1": 1, "data2": "second value."}
Проблема в том, что я развернул его на тестовом сервере и создал простое консольное приложение, чтобы попытаться заставить его работать , Вот приложение, которое пытается использовать службу. Считайте, что я добавил веб-ссылку и назвал его MyWS, поэтому пространство имен и класс имеют такое же имя (не то, что вызывает проблемы):
class Program
{
static void Main(string[] args)
{
MyWS.MyWS x = new MyWS.MyWS();
x.Timeout = 5000;
try
{
x.MyMethod("Hello World", 1);
}
catch (Exception ex)
{
Console.Write(ex.ToString());
}
Console.ReadLine();
}
}
Когда я запускаю это, я знаю, что веб-сервис был достигнут , Часть «Do some stuff here» в WS записывает в базу данных. Он делает это, без проблем, поэтому проблема должна быть после этого.
Единственная ошибка, которую я получаю, - это код 500 без реального смысла. Оглядываясь, я обнаружил, что это может быть метод .Flush(), поэтому я удалил эту строку и что для параметра Context.Response.BufferOutput должно быть установлено значение true. Сделал это, не получилось.
О, и (возможно), чтобы ухудшить ситуацию, WS будет позже поглощен Android-приложением. Но сначала первое: что мне не хватает?
Вместо того, чтобы просто игнорировать ваш 'catch' на сервере, почему вы не регистрируете исключение и не говорите нам, что он говорит? Ошибка '500' означает внутреннюю ошибку сервера и обычно имеет связанное с ней сообщение. Обработка ошибок - это ключ при работе с клиентом/сервером! – Belogix
Уловка здесь не применяется. Я имею в виду, если я отлаживаю шаг за шагом консольное приложение и вводим метод, я могу пройти весь путь, не дойдя до блока catch. Это продолжается, но когда он обычно выходит из веб-метода, я получаю исключение в функции 'main', и что он говорит, что ответ не является надлежащим XML-кодом. Это не должно быть, это должен быть JSON, поэтому консольное приложение должно ожидать его как такового. В любом случае возникает ошибка между ответом, отправленным веб-службой, и его получением приложением. Есть предположения? – MaoMonroy
Я немного изменил его, но ответ, который я получаю, является фактической страницей, отображаемой при запуске веб-службы, и она открывается в браузере, то есть я получаю фактический код HTML, который он генерирует, когда я нажимаю F5, чтобы запустить его , Я отправляю новый код. – MaoMonroy