问题描述
|
使用抛出异常的方法获得了标准的AMSX Web服务:
[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,errorThrown,callId) }
});
问题是:Web服务调用可以正常运行(我可以通过调试器看到),但是在客户端上我总是遇到失败-调用了错误函数。我假设在将对象序列化为JSON的过程中会发生一些不良情况。我无法诊断,VS不会在问题发生时停止。
而且,textStatus始终包含-“错误”,XMLHttpRequest.responseText包含一些垃圾。
可能是什么原因呢?任何想法如何诊断问题?
解决方法
如果您没有禁用服务的帮助/测试屏幕,则应该能够通过Web浏览器测试您的方法,并在那里看到序列化错误。它对我一直很好。该URL应该只是简单的:
http://<your_your_service_host_and_path>/<your_service_name>.asmx/LoadUserControl
另外,如注释中所建议,您可以尝试从代码中将Web方法作为标准方法进行调用。在这种情况下,当您使用JavaScriptSerializer时应该会遇到相同的错误。我不确定100%,但这可能与ASMX服务使用的相同。快速示例:
var result = new YourNamespace.YourService(...).YourMethod(...);
var serializedResult = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(result);