2010-01-21 49 views

回答

32

當您在IIS中託管WCF服務時,會使用.svc文件。

請參閱Microsoft的文檔herehere

IIS中有一個處理.svc文件的模塊。實際上,它是ASPNET ISAPI模塊,其手關閉.svc文件到已配置爲ASPNET的處理程序工廠類型之一的請求,在這種情況下

System.ServiceModel.Activation.HttpHandler, System.ServiceModel,版本= 3.0.0.0,文化=中性公鑰= b77a5c561934e089


如果你正在主持在IIS以外的東西WCF服務,那麼你不需要.svc文件。

+0

我還可以託管我的服務? – 2010-01-21 23:02:25

+3

想到的三個是:您編寫的自定義主機,您購買的第三方提供的主機或Windows服務。 http://msdn.microsoft.com/en-us/library/bb332338.aspx – Cheeso 2010-01-21 23:44:25

15

類的老問題,但讓Google ..

其實,這是可以創建一個WCF項目,並將其駐留在IIS中不使用.svc文件。

而是在你的SVC實現您DataContract代碼隱藏的,你實現它在一個正常的cs文件(即沒有後面的代碼。)

所以,你將有一個MyService.cs這樣的:

public class MyService: IMyService //IMyService defines the contract 
{ 
    [WebGet(UriTemplate = "resource/{externalResourceId}")] 
    public Resource GetResource(string externalResourceId) 
    { 
     int resourceId = 0; 
     if (!Int32.TryParse(externalResourceId, out resourceId) || externalResourceId == 0) // No ID or 0 provided 
     { 
      WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound; 
      return null; 
     } 
     var resource = GetResource(resourceId); 
     return resource; 
    } 
} 

然後來這件事使這成爲可能。現在,你需要創建一個Global.asax與代碼隱藏在其中添加一個Application_Start事件掛鉤:這個

public class Global : HttpApplication 
{ 
    void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     // Edit the base address of MyService by replacing the "MyService" string below 
     RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyService))); 
    } 
} 

的好處之一是,你不必處理的.svc在您的資源的URL。一個不太好的是你現在有一個Global.asax文件。

18

如果您使用的是.NET 4.0或更高版本,您現在可以通過配置「模擬」了.svc有以下幾點:

<system.serviceModel> 
    <!-- bindings, endpoints, behaviors --> 
    <serviceHostingEnvironment > 
     <serviceActivations> 
     <add relativeAddress="MyService.svc" service="MyAssembly.MyService"/> 
     </serviceActivations> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

那麼你並不需要一個物理.svc文件也不是全局的.asax

+1

在這個問題可以.svc和global.asax文件被視爲「棄用」? – 2016-03-01 10:05:20

相關問題