405 WCF中的方法不允许错误

Dot*_*ude 4 asp.net wcf

有人能发现这个实现的问题吗?我可以在浏览器中打开它并且它可以工作,但是来自客户端的调用(同时使用jquery和asp.net ajax失败)

服务合约

[OperationContract(Name = "GetTestString")]
[WebInvoke(Method = "GET",
           ResponseFormat = WebMessageFormat.Json
   )]
string GetTestString();
Run Code Online (Sandbox Code Playgroud)

在Web.config和其他绑定之间,我有一个webHttp绑定

<endpoint address="ajax" binding="webHttpBinding" contract="TestService" behaviorConfiguration="AjaxBehavior" />
Run Code Online (Sandbox Code Playgroud)

终点行为

  <endpointBehaviors>
    <behavior name="AjaxBehavior">
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)

Svc文件

<%@ ServiceHost Service="TestService" %>
Run Code Online (Sandbox Code Playgroud)

客户

var serviceUrl = "http://127.0.0.1/Test.svc/ajax/";
var proxy = new ServiceProxy(serviceUrl);
Run Code Online (Sandbox Code Playgroud)

我正在使用http://www.west-wind.com/weblog/posts/324917.aspx中的方法 来调用该服务

Dan*_*zey 6

链接上的示例使用Http POST,而不是Http GET.这是"不允许的方法" - 你需要改变代码来代替GET.

您发布的链接是您的客户端代码的源代码具有以下块:

 $.ajax( { 
                url: url,
                data: json,
                type: "POST",
                processData: false,
                contentType: "application/json",
                timeout: 10000,
                dataType: "text",  // not "json" we'll parse
Run Code Online (Sandbox Code Playgroud)

注意type: "POST"那里 - 你的需要"GET".我假设你从你发布的链接中获取了你的JQuery,因为405状态表明你的调用代码是错误的,而不是服务.

  • 任何Web服务都可以选择实现任何Http方法 - 最常见的是`GET`,`POST`,`PUT`和`DELETE`.`POST`和`PUT`通常用于写信息,所以在这方面,你链接的样本是不寻常的 - 一个名为`GetStockQuote`的方法似乎是一个奇怪的选择,实现为`POST` - 但它是服务作者的选择:-)值得注意的是你*可以*使用任何方法返回结果(你可以使用Http`DELETE`返回信息,如果你想!) - 它不一定很有意义! (2认同)