【问题标题】:WCF Rest .svc throws error when viewing directly, but works otherwiseWCF Rest .svc 在直接查看时会抛出错误,但可以正常工作
【发布时间】:2011-09-16 12:19:06
【问题描述】:

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

谢谢!

杰弗里·凯文·普瑞

【问题讨论】:

    标签: c# wcf rest operationcontract


    【解决方案1】:

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

    【讨论】:

    • 这仍然显示错误事件与 web.config 中的设置。
    • 如果您禁用这两个帮助页面,您应该会看到一个页面显示“未找到端点”。如果您真的想从“帮助”页面中删除任何类型的错误,您可以使用自己的 - 我已经在 MSDN WCF 论坛中回答了一个帖子 - social.msdn.microsoft.com/Forums/en-US/wcf/thread/…
    【解决方案2】:

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

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

    【讨论】:

    • 太棒了... httpGetEnabled 正是我所需要的。
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2019-08-30
    • 1970-01-01
    • 2020-03-06
    相关资源
    最近更新 更多