4

我有一个带有两个 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。

谢谢!

杰弗里·凯文·普瑞

4

2 回答 2

6

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

如果您期待 REST 服务的任何其他类型的“帮助”页面,也许您正在考虑<serviceDebug httpHelpPageEnabled="true" />?

于 2011-06-16T16:11:49.637 回答
1

您可以HttpHelpPageEnabled通过HttpsHelpPageEnabledServiceDebugBehavior. 或者在配置中,在<serviceBehaviors/behavior/serviceDebug>元素中设置这些属性。

于 2011-06-16T16:05:52.163 回答