我生气这个。我有一个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解决方案是向用户授予权限,我做过。
答案 0 :(得分:3)
我们解决了这个问题。它还没有定义ssl身份验证方法那么愚蠢。如果添加<authentication mode="None" />
,只是为了测试,所有方法都可以正常工作。
我们很快就会添加一种身份验证方法,但我很想知道为什么get和post不关心设置或不设置身份验证方法,而放置和删除时要小心。
答案 1 :(得分:1)
我遇到了同样的问题并解决了它添加到web.config
<system.web>
<authentication mode="None" />
</system.web>
我不知道发生了什么,我什么都没做,有谁知道为什么?也许是网络服务器的实现。