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

WCF Rest.svc在直接查看时引发错误,但在其他情况下正常工作

这是一个WSDL引擎试图为您的服务生成描述而无法生成的问题,因为您定义的服务契约通常不适用于WSDL引擎要处理的RPC样式的端点。这就是为什么您会看到消息无法与类型化参数混合的错误。您应该使用<serviceMetadata httpGetEnabled="false" />配置服务,因为WSDL和REST不能一起使用。

若您希望REST服务有任何其他类型的"帮助"页面,也许您想到的是<serviceDebug httpHelpPageEnabled="true" />

您可以通过在ServiceDebugBehavior中将HttpHelpPageEnabled(和HttpsHelpPageEnabled(如果适用))属性设置为false来抑制默认的"帮助"页面。或者在config中,在<serviceBehaviors/behavior/serviceDebug>元素中设置这些属性。