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】:
基本的内在类型(例如byte
、int
、string
和数组)将由 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 REST 服务 JSON POST 方法不允许