45

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

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

    [OperationContract]
    void FileUpload(UploadedFile file);

连同实际方法:

    public void FileUpload(UploadedFile file) {};

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

我错过了什么吗?

4

9 回答 9

75

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

于 2010-01-07T05:08:07.147 回答
66

您的浏览器正在发送 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.
 }
于 2009-02-13T12:34:26.253 回答
4

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

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

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

WCF 开发的一个巨大资源是我们在我们的商店中所知道的“鱼书”: Juval Lowy 的Programming WCF Services。与其他一些有点枯燥和学术性的 WCF 书籍不同,这本书采用了一种实用的方法来构建 WCF 服务,并且实际上很有用。彻底推荐。

于 2008-09-03T05:23:37.797 回答
2

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

在此处输入图像描述

于 2020-06-06T21:57:05.450 回答
1

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

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

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

http://localhost/project/myService.svc
于 2008-09-03T08:04:37.520 回答
1

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

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

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

于 2014-12-03T00:16:57.823 回答
0

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

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

于 2011-01-20T20:16:52.777 回答
0

您需要添加 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> 
于 2012-08-22T18:31:45.980 回答
0

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

于 2015-06-09T13:07:24.363 回答