我有一個自定義綁定具有下列服務合同的WCF服務,託管在IIS(IIS Express在開發中):WCF REST服務似乎不起作用 - 配置問題?
[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
我把BREAK-指向一些方法和附加的調試器到IIS進程,但似乎沒有任何東西被調用。
如果我使用WCFTestClient檢查服務元數據,它只會看到IService,而不會看到IRestService。這是正常的嗎? 編輯:是的,它似乎是(check this)
謝謝你的任何建議。
我假設你相同的服務實現兩個接口? –
是的。這種方法可能存在問題? – bzamfir
我打算建議如果它沒有同時實施,可能會有問題。 :) –