WCF Rest.svc在直接查看时引发错误,但在其他情况下正常工作
本文关键字:情况下 其他 常工作 工作 svc Rest WCF 错误 | 更新日期: 2023-09-27 17:59:23
我有一个WCF rest服务,它有两个OperationContracts,如下所示:
[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直接抛出以下错误:
系统。InvalidOperationException:在对WSDL导出扩展的调用中引发异常:System。ServiceModel。描述DataContractSerializerOperationBehavior合同:http://tempuri.org/:IRest---->系统。InvalidOperationException:无法加载操作"AddFile",因为它具有System类型的参数或返回类型。ServiceModel。频道。消息或具有MessageContractAttribute和其他不同类型参数的类型。使用系统时。ServiceModel。频道。消息或具有MessageContractAttribute的类型,该方法不能使用任何其他类型的参数。
我理解这个错误,但想知道如何修复/抑制它,以便它显示默认的WCF端点页面。我只是将WCF仅用于REST。
谢谢!
Jeffrey Kevin Pry
这是一个WSDL引擎试图为您的服务生成描述而无法生成的问题,因为您定义的服务契约通常不适用于WSDL引擎要处理的RPC样式的端点。这就是为什么您会看到消息无法与类型化参数混合的错误。您应该使用<serviceMetadata httpGetEnabled="false" />
配置服务,因为WSDL和REST不能一起使用。
若您希望REST服务有任何其他类型的"帮助"页面,也许您想到的是<serviceDebug httpHelpPageEnabled="true" />
?
您可以通过在ServiceDebugBehavior
中将HttpHelpPageEnabled
(和HttpsHelpPageEnabled
(如果适用))属性设置为false来抑制默认的"帮助"页面。或者在config中,在<serviceBehaviors/behavior/serviceDebug>
元素中设置这些属性。