WCF REST PUT和DELETE方法出现错误401.3,但GET和POST没有。

4
我对此感到非常苦恼。我有一个托管在 Windows Server 2012 上的 WCF Web 服务,使用 IIS 8 进行连接,并且通过 SSL 进行连接。我有一个自签名证书,但它是内部使用,所以没问题。

我创建了 GET 方法和 POST 方法。两者都可以从 Fiddler 和我们的私人 Android 应用程序中完美运行。现在我的合作伙伴创建了 PUT 和 DELETE 方法,但两者的 HTTP 响应都是 401。这四种方法都位于同一服务文件中。我已检查了服务器日志,发现子状态为 3。

我调查了 401.3 错误,发现所有情况都是因为错误提示无法访问该资源而导致的所有方法失败。

现在问题是,我如何能够访问一个资源以便达到一个方法,但无法访问同一资源以便访问另一个方法呢?

以下是接口:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet(UriTemplate = "Date",
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    string GetCurrentDate();

    [OperationContract]
    [WebInvoke(UriTemplate = "AddPlayer",
        Method = "POST", 
        ResponseFormat = WebMessageFormat.Json, 
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
    Result Insert(Player newPlayer);

    [OperationContract]
    [WebInvoke(UriTemplate = "UpdatePlayer",
        Method = "PUT",
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
    Result Update(Player updatePlayer);

    [OperationContract]
    [WebInvoke(UriTemplate = "DeletePlayer/{accountId}",
        Method = "DELETE",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Bare)]
    Result Delete(string accountId);
}

这是我在Fiddler中尝试的PUT和DELETE请求:

PUT (service url)/UpdatePlayer HTTP/1.1  
User-Agent: Fiddler  
Host: (host)  
Content-Type: application/json  

{"account":"MrFoo", "nick":"", "isOnline":"1", "lat":"", "long":"", 
 "latHome":"", "longHome":""}

-------------------------------------

DELETE (service url)/DeletePlayer/MrFoo HTTP/1.1  
User-Agent: Fiddler  
Host: (host)  
Content-Type: text/html
更新: 这个帖子 提供了解决方案,需要授予用户权限,我已经做了。
2个回答

4
我们已经解决了问题。问题非常简单,只是尚未定义ssl认证方法。如果您添加<authentication mode="None" />,仅用于测试,所有方法都可以正常工作。
我们很快将添加一个认证方法,但我想知道为什么GET和POST不关心设置或不设置认证方法,而PUT和DELETE却关心。

1

我曾经遇到同样的问题,并通过将 添加到 web.config 文件中解决了它。

<system.web>
    <authentication mode="None" />
  </system.web>

我不知道发生了什么事情,我什么都没做,有人知道为什么吗?可能是Web服务器的更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接