четверг, июля 17, 2008

Ajax: The system cannot locate the resource specified;

При отладке ajax вдруг стала происходить странная ошибка в коде вызова ScriptMethod-а отдельно выделенного ScriptService,
в частности я дебажил некоторый модуль .ascx, в котором происходит обращение к объекту-прокси, созданному на стороне клиента:
код на стороне клиента js:

Sys.Debug.fail('');
if (typeof(siStatuses) != "undefined" && siStatuses != null)
{
WS.Scripts.ScriptService.CheckStockImagesDownloading(siStatuses, OnCheckComplete, OnCheckFailed);
}


при обращении происходил exception на стороне клиента вида:
The system cannot locate the resource specified;

который возникал уже при самом последнем обращении к ядру передачи собственно сообщения в теле калбека, а именно
где то в коде:

Sys.Net.WebServiceProxy.invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, this.get_timeout());

........
this._xmlHttpRequest.send(body);



путем логического осмысления :) пришел к выводу что длина сообщения, передаваемого в scriptMethod была
значительно больше чем килобайт, указанный собственно говоря через атрибут UseHttpGet:


[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]


гораздо больше...:)) ну и соотвественно напрашивается вывод (чисто логически потому что более менее внятного сообщения об ошибке от ie я не смог получить, или просто не смог докопаться до самых недр) что xmlHttpRequest object просто не может совершить
такое обращение, путем перестановки на


[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]




т.е. мы разрещаем передачу сообщения только методом post, что значительно расширяет возможности самой передачи и снимает ограничение на длину сообщения, что собственно и лечит данную злокачественную опухоль... вылечена; :)

Комментариев нет: