WCF Rest .svc выдает ошибку при просмотре напрямую, но работает иначе
У меня есть служба отдыха 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 ответа
Это проблема, когда механизм WSDL пытается сгенерировать описание для вашей службы, и он не может этого сделать, потому что определенный вами контракт на обслуживание обычно не работает для конечных точек стиля RPC, которые обработаны механизмом WSDL. Вот почему вы получаете сообщение об ошибке, что сообщение не может быть смешано с введенными параметрами. Вы должны настроить сервис с <serviceMetadata httpGetEnabled="false" />
потому что WSDL и REST просто не играют вместе.
Если вы ожидаете любой другой вид "справочной" страницы для службы REST, возможно, вы думаете о <serviceDebug httpHelpPageEnabled="true" />
?
Вы можете отключить страницу помощи по умолчанию, установив HttpHelpPageEnabled
(а также HttpsHelpPageEnabled
если применимо) свойства false в ServiceDebugBehavior
, Или в конфиге, установите эти свойства в <serviceBehaviors/behavior/serviceDebug>
элемент.