如何调试jQuery ajax POST到.NET webservice

时间:2010-06-16 17:01:52

标签: c# asp.net web-services

我有一个我在本地发布的网络服务。我写了一个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正在给我一个更准确的指示,表明出了问题,但我无法确定问题是什么。

有人可以建议我应该如何公开特定的服务器错误消息?谢谢你的帮助!

2 个答案:

答案 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,但是查看代码时不应该有所作为。