jQuery发布到WCF服务返回405错误
我最近刷了我的jQuery,当我越过post时我遇到了一个问题,我无法从wcf服务得到响应我经常得到405 – 方法不允许。 我的要求对我来说很好,我想知道我是否错过了一些至关重要而又明显的原因。
这是使用的邮政编码:
$.ajax({ type: "POST", url: "http://localhost:59929/CustomerService/GetCustomers", data: null, ContentType: "application/json", dataType: "json", success: function (msg) { alert("Called and got: " + msg); }, error: function (result) { alert('Service call failed: ' + result.status + '' + result.statusText); } });
wcf代码如下:
[ServiceContract] public interface ICustomerService { [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] List GetCustomers(); [OperationContract] OperationStatus InsertCustomer(Customer cust); }
配置如下:
提琴手将原始post显示为:
POST http://localhost:59929/CustomerService/GetCustomers HTTP/1.1 Host: localhost:59929 Connection: keep-alive Content-Length: 0 Origin: http://localhost:59513 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1 Accept: application/json, text/javascript, */*; q=0.01 Referer: http://localhost:59513/LearnJQuery2/ajax/ajax_post.htm Accept-Encoding: gzip,deflate,sdch Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
而小提琴手也确认了405的回应。
你打电话的域名是什么? 它可能是由同源策略引起的。 如果是这种情况,请尝试使用JSONP而不是JSON。
另外,您是否尝试过像Fiddler这样的工具来确切了解请求/响应是什么? 这可以揭示正在发生的事情。
好吧,我看了很长一段时间,然后意识到这没有一个问题,但是一个pleathora :)所以inheritance问题解决了。
所有它们的拳头必须确实来自同一个具有相同端口和协议的域,但情况并非如此。 我将我的服务移动到我的应用程序中并适当地配置了绑定。 下一部分是正确装饰您的WCF服务,因此这里是正确配置服务的代码。
ICustomerService.cs
[ServiceContract] public interface ICustomerService { [OperationContract] [WebInvoke( Method = "POST" , BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] List GetCustomers(); }
CustomerService.cs
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class CustomerService : ICustomerService { public List GetCustomers() { return new List { new JSONCustomer {id = 1, FirstName = "john", LastName = "Doe"}, new JSONCustomer {id = 2, FirstName = "jane", LastName = "Doe"}, }; } }
Web.config文件
接下来是使用的ajax代码(整个网页):
Ajax Post
JSONCustomer.cs
[DataContract] public class JSONCustomer { [DataMember] public int id { get; set; } [DataMember] public string FirstName { get; set; } [DataMember] public string LastName { get; set; } }
我真的希望那些现在遇到问题的人会在这方面找到帮助,重要的是你要注意jquery中的所有东西,绑定,装饰和ajax代码一点点滑动,它就行不通。
这看起来像服务器配置问题,其中调用者无法将该方法视为wcf服务的一部分。 此链接提供了一些有用的提示,说明如何解决405错误的最常见原因。 我希望它有所帮助: http : //social.msdn.microsoft.com/Forums/en-US/wcf/thread/31d3f1aa-28b6-4bd7-b031-73b7e7588e6d/