ASMX Web服务在客户端上的xhr.responseText中引发了一个垃圾

问题描述

| 使用抛出异常的方法获得了标准的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);