2010-01-21 22 views

Trả lời

32

.svc tệp được sử dụng khi bạn lưu trữ dịch vụ WCF của bạn trong IIS.

Xem tài liệu của Microsoft herehere.

Có một mô-đun trong IIS xử lý tệp .svc. Trên thực tế, nó là ASPNET ISAPI Module, mà bàn tay ra yêu cầu cho các tập tin .svc đến một trong các loại nhà máy xử lý đã được cấu hình cho ASPNET, trong trường hợp này

System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version = 3.0.0.0, Culture = trung tính, PublicKeyToken = b77a5c561934e089


Nếu bạn đang lưu trữ dịch vụ WCF của bạn trong một cái gì đó khác hơn là IIS, sau đó bạn không cần file .svc.

+0

Tôi có thể lưu trữ dịch vụ của mình ở đâu khác? –

+3

Ba điều bạn cần lưu ý là: Máy chủ lưu trữ tùy chỉnh mà bạn viết, máy chủ được cung cấp bên thứ ba mà bạn mua hoặc Dịch vụ Windows. http://msdn.microsoft.com/en-us/library/bb332338.aspx – Cheeso

15

Kind của một câu hỏi cũ, nhưng đối với nhân viên của Google ..

Trên thực tế, nó có thể tạo ra một dự án WCF và lưu trữ nó trong IIS mà không sử dụng một tập tin .svc.

Thay vì thực hiện DataContract của bạn trong svc bạn code-behind, bạn thực hiện nó trong một file .cs bình thường (tức là không có mã số đằng sau.)

Vì vậy, bạn sẽ có một MyService.cs như thế này:

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; 
    } 
} 

Sau đó, đến điều có thể làm được điều này. Bây giờ bạn cần để tạo ra một Global.asax với mã-đằng sau, nơi bạn có thêm một móc sự kiện 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))); 
    } 
} 

Một điều tốt đẹp về vấn đề này là bạn không cần phải xử lý các .svc trong URL tài nguyên của bạn. Một điều không tốt đẹp là bây giờ bạn có một tập tin Global.asax.

18

Nếu bạn đang sử dụng .net 4.0 trở lên, bạn bây giờ có thể "mô phỏng" các .svc qua cấu hình như sau:

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

Sau đó, bạn không cần một tập tin .svc vật lý cũng không phải là toàn cầu .asax

+1

Tệp .svc và global.asax có thể trong vấn đề này được xem là "không được chấp nhận" không? –

Các vấn đề liên quan