我有一个我在本地发布的网络服务。我写了一个HTML页面来测试Web服务。 Web服务期望一个将是XML的字符串。当我从VS内调试Web服务时,一切都很好。我可以使用FireBug,看看我的Web服务确实被他们的AJAX调用所击中。在本地将Web服务部署到IIS后,它似乎无法正常工作。
我需要知道解决此问题的最佳方法。我的AJAX js看起来像这样:
function postSummaryXml(data) {
$.ajax({
type: 'POST',
url: 'http://localhost/collection/services/datacollector.asmx/SaveSummaryDisplayData',
data: { xml: data },
error: function(result) {
alert(result);
},
success: function(result) {
alert(result);
}
});
网络方法如下:
[WebMethod]
public string SaveSummaryDisplayData(string xml)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(xml);
XmlParser parser = new XmlParser(xmlDocument);
IModel repository = new Repository();
if(repository.AddRecord("TestData",parser.TestValues))
{
return "true";
}
return "false";
}
}
我将返回字符串添加到Web方法中,以确保从ajax真正击中Web服务。问题是:
在FF中,始终调用“Success”函数,但结果始终为“NULL”。并且Web方法似乎没有工作(没有保存数据)。
在IE中调用'错误'函数并且响应是服务器错误:500。我认为(信不信由你)IE正在给我一个更准确的指示,表明出了问题,但我无法确定问题是什么。
有人可以建议我应该如何公开特定的服务器错误消息?谢谢你的帮助!
答案 0 :(得分:1)
你和firebug一起走在正确的轨道上。
你可能知道的另一个很棒的实用工具是提琴手。
基本上你想查看浏览器和服务器之间的请求/响应(http流量)。
如果您在本地使用应用程序与基于http流量的IIS之间看不到区别,那么在服务器方法中添加更多日志记录。看看是否输入了该方法。如果是,记录它返回的值
向global.asax添加全局异常处理,以便在发生较低级别异常时(例如序列化程序失败)仍会记录异常。
答案 1 :(得分:0)
这很脏,绝对不是最好的解决方案,但它可能会让你快速到达某个地方。如果您只是直接导航到URL并提供xml
参数作为查询字符串,那么您应该能够看到实际错误(只要您的Web.config文件中的CustomErrors
关闭)
http://localhost/collection/services/datacollector.asmx/SaveSummaryDisplayData?xml=whatever
或者一些实际的URL编码的XML - 应该无关紧要,除非它是导致错误的XML解析。是的,这会使用GET
代替POST
,但是查看代码时不应该有所作为。