Веб-сервис ASMX выбрасывает исключение, полученное мусор в xhr.responseText на клиенте - PullRequest
0 голосов
/ 24 мая 2011

Получил стандартный веб-сервис AMSX с методом, который вызывает исключение:

[WebMethod(EnableSession = true)]
public JsonClientSideDataGrid LoadUserControl(string dataGridForm, string viewParameters, string dataGridSettings, bool isOnPopup)
{
   // code is here
   // ...

   return result;   
}

На стороне клиента стандартный код jQuery:

jQuery.ajax({
    type: "POST",
    url: webCallUrl,
    processData: false,
    data: jQuery.toJSON(data),
    contentType: "application/json; charset=utf-8",
    timeout: Configuration.WSTimeout,
    dataType: "json",
    success: callbackFunction,
    error: function (XMLHttpRequest, textStatus, errorThrown) { errorFunction(XMLHttpRequest, textStatus, errorThrown, callId) }
});

Проблема в том, что вызов веб-службы работает нормально (я вижу это по отладчику), но на клиенте я всегда получаю ошибку - вызывается функция ошибки Я предполагаю, что во время сериализации объекта в JSON происходит что-то плохое. Я не мог диагностировать это, VS не останавливается на месте выдачи.

Более того, textStatus содержит всегда - «ошибка», XMLHttpRequest.responseText содержит некоторую фигню.

Какие могут быть причины для этого? Есть идеи, как диагностировать проблему?

1 Ответ

1 голос
/ 24 мая 2011

Если вы не отключили экран справки / тестирования своей службы, вы сможете проверить свой метод через веб-браузер и увидеть там ошибку сериализации.Это всегда работало хорошо для меня.URL должен быть просто:

http://<your_your_service_host_and_path>/<your_service_name>.asmx/LoadUserControl

Также, как предлагается в комментарии, вы можете попробовать вызвать веб-метод как стандартный метод из кода.В таком случае вы должны получить ту же ошибку при использовании JavaScriptSerializer.Я не уверен на 100%, но это, вероятно, то же самое, что сервисы ASMX.Быстрый пример:

var result = new YourNamespace.YourService(...).YourMethod(...);
var serializedResult = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(result);
...