我有一个带有两个OperationContracts的WCF休息服务,如下所示:
[OperationContract]
[WebGet(UriTemplate = "ping/")]
Message PingServer();
[OperationContract]
[WebGet(UriTemplate = "files/")]
Message AddFile(string accessKey);
当我访问http://localhost/rest.svc/ping/时,它工作正常,如果我访问http://localhost/rest.svc/files/,它就可以正常工作。
但是,如果我直接访问http://localhost/rest.svc,则会引发以下错误:
System.InvalidOperationException:在对WSDL导出扩展的调用中抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior 合同:http://tempuri.org/:IRest ----> System.InvalidOperationException:无法加载操作“AddFile”,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或者具有MessageContractAttribute的类型和其他不同类型的参数。使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数。
我理解错误,但想知道如何修复/禁止它,以便它显示默认的WCF端点页面。我只是使用WCF进行REST。
谢谢!
Jeffrey Kevin Pry
答案 0 :(得分:6)
这是WSDL引擎尝试为您的服务生成描述并且无法执行此操作的问题,因为您定义的服务协定通常不适用于WSDL引擎要处理的RPC样式端点。这就是为什么你得到你所看到的错误消息无法与类型参数混合的原因。您应该使用<serviceMetadata httpGetEnabled="false" />
配置服务,因为WSDL和REST不能一起使用。
如果您期望REST服务的任何其他类型的“帮助”页面,也许您正在考虑<serviceDebug httpHelpPageEnabled="true" />
?
答案 1 :(得分:1)