WCF Rest .svc выдает ошибку при просмотре напрямую, но работает иначе - PullRequest
4 голосов
/ 16 июня 2011

У меня есть служба отдыха WCF с двумя 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 напрямую, выдается следующая ошибка:

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 только для отдыха.

Спасибо!

Джеффри Кевин Прай

Ответы [ 2 ]

6 голосов
/ 16 июня 2011

Это проблема, когда механизм WSDL пытается сгенерировать описание для вашей службы, и он не может этого сделать, потому что определенный вами контракт на обслуживание обычно не работает для конечных точек в стиле RPC, которые обработаны механизмом WSDL. Вот почему вы получаете сообщение об ошибке, что сообщение не может быть смешано с введенными параметрами. Вы должны настроить службу с <serviceMetadata httpGetEnabled="false" />, потому что WSDL и REST просто не играют вместе.

Если вы ожидаете любой другой вид «справочной» страницы для службы REST, возможно, вы думаете о <serviceDebug httpHelpPageEnabled="true" />?

1 голос
/ 16 июня 2011

Вы можете подавить страницу «помощи» по умолчанию, установив для HttpHelpPageEnabledHttpsHelpPageEnabled, если применимо) свойства значение false в ServiceDebugBehavior.Или в config, установите эти свойства в элементе <serviceBehaviors/behavior/serviceDebug>.

...