У меня есть служба WCF с пользовательской привязкой, размещенная в IIS (IIS Express в разработке) со следующим контрактом на обслуживание:
[ServiceContract]
public interface IServer
{
[OperationContract]
StreamCollection GetStreams(Guid poolKey);
[OperationContract]
PoolCollection GetPools();
[OperationContract]
StreamEntity GetStream(Guid poolKey, string localIndex);
}
Он работает нормально (из клиента, а также я вижу, что его метаданные обнаружены нормально)в WCFTestClient).
Я должен представить его функциональность как REST, поэтому я создал новый контракт, как показано ниже
[ServiceContract]
public interface IRestServer
{
[OperationContract(Name="GetStreamsREST")]
[WebGet(UriTemplate = "pool/{poolKey}/streams")]
StreamCollection GetStreams(string poolKey);
[OperationContract(Name = "GetPoolsREST")]
[WebGet(UriTemplate = "pools")]
PoolCollection GetPools();
[OperationContract(Name = "GetStreamREST")]
[WebGet(UriTemplate = "pool/{poolKey}/stream/{localIndex}")]
StreamEntity GetStream(string poolKey, string localIndex);
}
У меня оба интерфейса реализованы в одном классе обслуживания.Файл web.config имеет вид
<behaviors>
<endpointBehaviors>
<behavior name="webHttp">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="CustomBinding">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="655360" />
</binding>
</customBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="MyServ.Server.Server">
<endpoint address="" binding="customBinding" bindingConfiguration="CustomBinding" contract="MyServ.Server.IServer" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="rest" behaviorConfiguration="webHttp" binding="webHttpBinding" contract="MyServ.Server.IRestServer" />
</service>
</services>
Однако, когда я просматриваю доступ к службе, используя rest, с URL-адресом, подобным
http://localhost:<myport>/Service.svc/pools
http://localhost:<myport>/Service.svc/pool/somekey/streams
http://localhost:<myport>/Service.svc/pool/somekey/streams
, я получаю ошибку 404.
Я поставил точку останова в некоторых методах и подключил отладчик к процессу IIS, но, похоже, ничего не вызывается.
Если я проверяю метаданные службы с помощью WCFTestClient, он просто видит IService, но не IRestService.Это нормально? РЕДАКТИРОВАТЬ : Да, похоже, что это ( отметьте это )
Спасибо за любые предложения.