WCF Rest .svc在直接查看时抛出错误,但不起作用

Jef*_*Pry 4 c# rest wcf operationcontract

我有一个带有两个OperationContracts的WCF休息服务,如下所示:

    [OperationContract]
    [WebGet(UriTemplate = "ping/")]
    Message PingServer();

    [OperationContract]
    [WebGet(UriTemplate = "files/")]
    Message AddFile(string accessKey);
Run Code Online (Sandbox Code Playgroud)

当我访问http://localhost/rest.svc/ping/它工作正常,如果我访问http://localhost/rest.svc/files/它工作正常.

但是,如果我直接访问http://localhost/rest.svc,则会抛出以下错误:

System.InvalidOperationException:在对WSDL导出扩展的调用中抛出异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior contract:http://tempuri.org/:IRest ----> System.InvalidOperationException:操作'AddFile'无法加载,因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型或具有MessageContractAttribute的类型和不同类型的其他参数.使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数.

我理解错误,但想知道如何修复/抑制它,以便它显示默认的WCF端点页面.我只是使用WCF进行REST.

谢谢!

Jeffrey Kevin Pry

Dre*_*rsh 6

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

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