2015-10-19 82 views
0

我正在向項目添加新的WCF服務,但新服務與舊服務不一樣。將新的WCF服務添加到現有項目

每個具有類似的SVC文件:

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Project.Service1" %> 

每個具有限定所述的ServiceContract和OperationContracts接口:

[ServiceContract] 
[ServiceKnownType(typeof(Service1))] 
public interface IService1 
{ 
    [OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "json/method1", RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] 
    ResponseObject Method1(RequestObject req); 
} 

每個在web.config文件中定義:

<service name="Company.Project.Service1" behaviorConfiguration="ServiceBehavior"> 
    <endpoint address="rest" binding="webHttpBinding" contract="Company.Project.IService1" behaviorConfiguration="web"/> 
    <endpoint address="soap" binding="basicHttpBinding" contract="Company.Project.IService1"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 

但是,當我在其中一個預生產環境中訪問原始服務的URL時在使用Chrome瀏覽器時,我看到我期望的「Method Not Allowed」錯誤(因爲我正在使用GET)。

當我訪問新的服務,我得到一個404錯誤:

Server Error in [Snipped] 

The resource cannot be found. 

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /[Snipped]/Service2.svc/rest/json/method2 

另一個奇異之處在於它在我以前的預生產環境中工作,所以它可能只是一些在部署過程。

+0

彰顯預生產的配置與當前一個。我相信你會錯過一些東西。你也可以嘗試'',不過如果你的API針對非.Net客戶端,那麼不建議這樣做。 – vendettamit

+0

@vendettamit - 我能想到的所有東西都已匹配(SVC文件,界面,web.config中的''部分)。你對我需要看的其他文件/配置部分有任何建議嗎? –

+1

這個問題的其他原因可能是;如果路由未在Global.asax中定義。你能否確認從預生產的全局處理程序的app_start中的代碼和新的env是否匹配? – vendettamit

回答

1

請確保您有在您在現有項目中增加了新的服務您的Global.asax文件中定義的路由。這可能很容易被忽略,並導致無法通過Asp.net管道環境找到資源。

所以,如果你有服務的新版本,讓說ApiService2,你將需要添加類似的條目:

routes.Add(new ServiceRoute("api2", new ServiceHostFactory(), typeof(ApiService2))); 
1

我觀察到你的方法被調用方法一,但你試圖去的方法2

請問您的web配置也有類似下面的endpointBehavior的部分。你需要這個爲你的webHttpBinding啓用REST端點。你應該添加一個服務行爲,以及

<behaviors> 
    <endpointBehaviors> 
    <behavior name="web"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="web"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
+0

我正嘗試在Service2中調用Method2。道歉,如果這不清楚 - 我試圖去識別服務。 –

+0

web.config中有現有的「和」配置。介紹Service2時我沒有修改它們。 –