WCF 服务返回“方法不允许”

Posted

技术标签:

【中文标题】WCF 服务返回“方法不允许”【英文标题】:WCF Service Returning "Method Not Allowed" 【发布时间】:2010-09-07 15:44:58 【问题描述】:

在开发我的第一个 WCF 服务的过程中,当我尝试使用它时,我得到“不允许的方法”,没有其他解释。

我已经使用 ServiceContract 和 OperationContract 设置了我的界面:

    [OperationContract]
    void FileUpload(UploadedFile file);

配合实际方法:

    public void FileUpload(UploadedFile file) ;

要访问服务,我输入http://localhost/project/myService.svc/FileUpload 但我收到“不允许的方法”错误

我错过了什么吗?

【问题讨论】:

【参考方案1】:

如果您在服务方法上使用[WebInvoke(Method="GET")] 属性,请确保将方法名称拼写为“GET”而不是“Get”或“get”,因为它区分大小写!我有同样的错误,我花了一个小时才弄明白。

【讨论】:

哈,这是我的问题。谢谢。 这个解决方案也帮助我解决了 405 错误!谢谢! 呵呵,我使用 Get 而不是 GET,并且我从 *** 尝试了许多其他答案,没有任何效果。太棒了,你节省了一天.. 感谢您提供有效信息 啊!这让我发疯了一阵子! 哇,很高兴我找到了这个,因为它给了我一个线索:我在 [WebGet()] 上遇到了同样的错误,但是在看到这个之后,我将它更改为 WebInvoke(Method:="GET" ... 并解决了我的问题和数据按预期返回。【参考方案2】:

您的浏览器正在发送 HTTP GET 请求:确保您在合约中的操作上具有 WebGet 属性:

[ServiceContract]
public interface IUploadService

    [WebGet()]
    [OperationContract]
    string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser.

    [OperationContract]
    void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test.
 

【讨论】:

这对我不起作用(框架 4.0 上的 asp.net),但 darthjit 的回答如下 那么为什么要检查这个而不是 darjhit 的呢? @LeiLeyba 因为作者标注的是答案,而不是社区 我收到了[WebGet()] 的这个错误。对我来说,我不得不使用WebInvoke(Method:="GET" ...【参考方案3】:

基本的内在类型(例如byteintstring 和数组)将由 WCF 自动序列化。自定义类,如您的 UploadedFile,不会。

所以,一个愚蠢的问题(但我不得不问...):UploadedFile 是否标记为[DataContract]?如果不是,您需要确保它是,并且您要发送的类中的每个成员都标有 [DataMember]。

与远程处理不同,使用 [XmlSerializable] 标记类允许您序列化整个类而无需标记您想要序列化的成员,WCF 需要您标记每个成员。 (我相信这在 .NET 3.5 SP1 中正在发生变化......)

WCF 开发的巨大资源是我们在商店中称为“鱼书”的资源:@​​987654321@,作者是 Juval Lowy。与其他一些有点枯燥和学术性的 WCF 书籍不同,这本书采用了一种实用的方法来构建 WCF 服务,并且实际上很有用。强烈推荐。

【讨论】:

【参考方案4】:

我今天遇到了同样的问题。我已经安装了 IIS,但是在 .net framework 4.6 下没有激活 WCF 服务。

【讨论】:

【参考方案5】:

听起来您使用的地址不正确:

要访问服务,我输入http://localhost/project/myService.svc/FileUpload

假设您的意思是这是您给客户代码的地址,那么我怀疑它实际上应该是:

http://localhost/project/myService.svc

【讨论】:

【参考方案6】:

我已经遇到同样的问题超过一天了 - 终于弄明白了。感谢@Sameh 的提示。

您的服务可能运行良好。使用浏览器的地址栏测试 POST 消息将不起作用。您需要使用 Fiddler 来测试 POST 消息。

提琴手指令... http://www.ehow.com/how_8788176_do-post-using-fiddler.html

【讨论】:

另外,刚刚找到了 Firefox / Chrome / others 的 RESTClient 插件。它比 Fiddler 更容易使用 - 可能是一个更好的选择。 您不需要使用 Fiddler。你可以在不安装任何东西的情况下做到这一点;只需将以下 HTML 保存到文件(已编辑 URL)并在浏览器中打开它:
【参考方案7】:

只能从浏览器 IE 访问带有 WebGet 的方法;您只需输入地址即可访问其他 http 动词

您可以尝试使用 Codeples 的 Restful 服务启动工具包或使用 fiddler 来测试您的其他 http 动词

【讨论】:

我想你真的想说这个:你可以在浏览器中测试 GET 消息,但其他动词必须在 Fiddler 中测试?我同意。【参考方案8】:

你需要在web.config中添加

<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/>  

<bindings>  
    <customBinding>  
        <binding name="basicConfig">  
            <binaryMessageEncoding/>  
            <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>  
        </binding>  
    </customBinding> 

【讨论】:

【参考方案9】:

我的案例:在新服务器上配置服务。 ASP.NET 4.0 未正确安装/注册; svc 扩展无法识别。

【讨论】:

以上是关于WCF 服务返回“方法不允许”的主要内容,如果未能解决你的问题,请参考以下文章

WCF POST 方法返回“方法不允许”

使用 IIS 时方法不允许 405

自托管 WCF REST 服务 JSON POST 方法不允许

删除不工作在 WCF 休息服务抛出 (405) 方法不允许

wcf REST 服务和 JQuery Ajax Post:方法不允许

WCF 错误:405 方法不允许