views:

56

answers:

2

Hey all.

I have a web service that I have published locally. I wrote an HTML page to test the web service. The webservice is expecting a string that will be XML. When I debug the web service from within VS everything works great. I can use FireBug and see that my web service is indeed being hit by they AJAX call. After deploying the web service locally to IIS it does not appear to be working.

I need to know the best way to trouble shoot this problem. My AJAX js looks like this:

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);

        } 
            }); 

The web method looks like so:

[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";

    }
}

I added the return string to the web method in an attempt to ensure that the web-service is really hit from the ajax. The problem is this:

In FF the 'Success' function is always called yet the result is always 'NULL'. And the web method does not appear to have worked (no data saved).

In IE the 'Error' function is called and the response is server error: 500. I think (believe it or not) IE is giving me a more accurate indication that something is wrong but I cannnot determine what the issue is.

Can someone please suggest how I should expose the specific server error message? Thanks for the help!

A: 

This is dirty and absolutely not the best solution, but it might get you somewhere quick. If you just navigate to the URL directly and provide the xml parameter as a query string, then you should be able to see the actual error (as long as CustomErrors is off in your Web.config file).

http://localhost/collection/services/datacollector.asmx/SaveSummaryDisplayData?xml=whatever

Or some actual URL-encoded XML -- shouldn't matter, unless it's the XML parsing that's causing the error. Yes, this uses GET instead of POST, but looking at your code it shouldn't make a difference.

Ian Henry
A: 

you're on the right track with firebug.

another great utility you're probably aware of is fiddler.

basically you want to look at request/response (http traffic) between your browser and server.

if you can't see a difference between using your app locally vs IIS based on http traffic, than add more logging in your server method. see if the method is entered. if yes, log what value it is returning)

add global exception handling to your global.asax, so that if lower level exception happens (such as serializer failed) the exception is still logged.

Sonic Soul