WCF服务返回"不允许的方法"
时间:2020-03-05 18:46:52 来源:igfitidea点击:
在开发我的第一个WCF服务的过程中,当我尝试使用它时,我得到了"不允许使用方法",没有其他说明。
我已经使用ServiceContract和OperationContract设置了我的界面:
[OperationContract] void FileUpload(UploadedFile file);
连同实际方法:
public void FileUpload(UploadedFile file) {};
要访问该服务,请输入http://localhost/project/myService.svc/FileUpload
但出现"方法不允许"错误
我想念什么吗?
解决方案
回答
基本的内在类型(例如,字节,整数,字符串和数组)将由WCF自动进行序列化。自定义类(例如UploadedFile)将不会。
因此,一个愚蠢的问题(但我不得不问...):UploadedFile是否标记为" [DataContract]"?如果不是,则需要确保它是正确的,并且要发送的类中的每个成员都标记有[DataMember]。
与远程处理不同,在远程处理中,使用[XmlSerializable]标记类使我们可以序列化整个类而不必费心去标记要序列化的成员,而WCF需要标记每个成员。 (我相信这在.NET 3.5 SP1中正在改变...)
WCF开发的巨大资源是我们在商店中所知的"鱼书":Juval Lowy编写的WCF服务编程。与周围的其他WCF书籍有些枯燥和学术性不同,这本书采用一种实用的方法来构建WCF服务,并且实际上很有用。彻底推荐。
回答
听起来我们使用的地址不正确:
To access the Service I enter http://localhost/project/myService.svc/FileUpload
假设意思是这是我们提供给客户代码的地址,那么我怀疑它实际上应该是:
http://localhost/project/myService.svc
回答
浏览器正在发送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. }
回答
如果在服务方法上使用了[WebInvoke(Method =" GET")]]属性,请确保将方法名称拼写为" GET"而不是" Get"或者" get",因为它区分大小写!我遇到了同样的错误,花了一个小时才弄清楚那个错误。