I think that's everything. Anyway, the $.ajax call returns a success, but the web service method was not being called (I had a breakpoint set). I opened up Fiddler and found I was being given a 405: Method Not Allowed. I've seen that before, but only when I had forgotten to set up the method to allow POST requests. I'm very confused as to why it is doing this now.

Also, oddly enough, if I clone the ajax request captured in Fiddler, I get the following:

I'm not sure how, in your service, a string of firstName can map to what you're sending up (a serialized JavaScript object literal). Is this just pseudo-code? Also, with the ajax request capture that you pasted, where are you copying that data from? If you click on the 'TextView' tab in the Request pane (on the top right-hand side), do you not see your payload?
–
David HoersterAug 26 '10 at 20:50

Actually, now that I look at your Fiddler request, the HTTP verb that you're using is OPTIONS, not POST. That's why you're getting the 405 back. If I take a POST request that only allows POST and try to do a GET, I get a 405 in Fiddler (and in my app). So I guess I'm wondering is there anything else running on your machine (proxy?) that would cause this? Is your client and server on the same domain (same server, same port -- e.g., localhost:53128)?
–
David HoersterAug 26 '10 at 21:00

The web service is hosted on localhost (in IIS7.5). The site making the $.ajax request is hosted on localhost:24526 (some random port, in the app dev server). I noticed that Fiddler keeps cloning the request using the OPTIONS verb; no idea why it is doing that. It almost seems like the request header sent from $.ajax is OPTIONS, but that doesn't make any sense. I do not actually see the payload in Fiddler :(.
–
DusdaAug 26 '10 at 22:21