WCF 请求失败,HTTP 状态为 405:不允许方法

Posted

技术标签:

【中文标题】WCF 请求失败,HTTP 状态为 405:不允许方法【英文标题】:WCF The request failed with HTTP status 405: Method Not Allowed 【发布时间】:2010-09-26 23:28:47 【问题描述】:

我有一个托管在 Windows 服务上的 WCF 服务,并使用 BasicHttp 端点为已连接到它的 Windows Mobile 设备提供服务。

问题在于设备模拟器。我可以连接到该服务并毫无问题地使用它,但可以使用实际设备。我收到错误:

WCF 请求失败,HTTP 状态为 405:方法不允许。

我使用以下代码来实现该服务。

BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.UseDefaultWebProxy = false;

m_ServiceHost.AddServiceEndpoint(typeof(IKooft), basicHttpBinding, "KooftService");
m_ServiceHost.Open();

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

检查您的 IIS 扩展,尤其是 .wsdl 的扩展是否有效:

在 IIS 中:

查看您网站的属性。 在主目录选项卡中,单击 配置。 点击添加(我的路径是 "C:\Program 文件 (x86)\Common 文件\MSSOAP\BINARIES\SOAPIS30.DLL") 将扩展名设置为 .WSDL 并允许 “获取”和“发布” 选择“脚本 引擎”和“验证文件是否存在”

应该是这样的。

【讨论】:

正如我所提到的,它托管在 Windows 服务应用程序而不是 IIS 上。 SOAPIS30.DLL 在我的开发框中丢失,我遇到了类似的问题。你知道我可以从哪里得到那个DLL吗?它属于什么 SDK? 回答我自己的问题,即 DLL 来自已弃用的 Microsoft SOAP Toolkit。【参考方案2】:

如果您使用 WCF REST 服务,您应该像这样定义您的合同方法:

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json)]
string CheckService();

特别注意WebInvoke属性和Method="POST"

【讨论】:

【参考方案3】:

使用 WCF 时,您可能还需要将 .svc 文件类型映射到 IIS 中的 aspnet_isapi.dll。

【讨论】:

以上是关于WCF 请求失败,HTTP 状态为 405:不允许方法的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:$http 服务 GET 到 php 服务器:请求方法:选项,状态代码:405 方法不允许

WebApi Post 方法总是返回“请求的资源不支持 http 方法 'GET'。”状态:405 方法不允许

这是啥意思? “加载资源失败:服务器响应状态为 405(不允许方法)”

REST - HTTP 状态 405;方法不允许;请求方法“PUT”不支持错误

服务器响应状态为 405(不允许使用方法)

HTTP 状态 405 - 此 URL 不支持 HTTP 方法 GET 并且请求的资源不允许指定的 HTTP 方法