WCF REST错误401.3在PUT和DELETE方法中但在GET和POST中没有

时间:2014-05-02 18:36:20

标签: wcf rest ssl iis-8 http-status-code-401

我生气这个。我有一个WCF Web服务托管在带有IIS 8的Windows服务器2012中。连接是通过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

更新this is the thread解决方案是向用户授予权限,我做过。

2 个答案:

答案 0 :(得分:3)

我们解决了这个问题。它还没有定义ssl身份验证方法那么愚蠢。如果添加<authentication mode="None" />,只是为了测试,所有方法都可以正常工作。

我们很快就会添加一种身份验证方法,但我很想知道为什么get和post不关心设置或不设置身份验证方法,而放置和删除时要小心。

答案 1 :(得分:1)

我遇到了同样的问题并解决了它添加到web.config

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

我不知道发生了什么,我什么都没做,有谁知道为什么?也许是网络服务器的实现。