我对此感到非常苦恼。我有一个托管在 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
更新: 这个帖子 提供了解决方案,需要授予用户权限,我已经做了。