2010-01-21 14 views

Odpowiedz

32

.svc są używane podczas hostowania usługi WCF w usługach IIS.

Zobacz dokumentację Microsoft here i here.

W module IIS znajduje się moduł obsługujący plik .svc. Właściwie, to jest moduł ISAPI ASPNET, który podaje się do wniosku o pliku .svc do jednego z rodzajów fabrycznych obsługi, które zostały skonfigurowane dla ASPNET, w tym przypadku

System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version = 3.0.0.0, Culture = neutral, TokenKluczaPublicznego = b77a5c561934e089


Jeśli hosting usług WCF w czymś innym niż IIS, wtedy nie trzeba plik .svc.

+0

Co jeszcze mogę udostępnić moją usługę? –

+3

Trzy, które przychodzą na myśl, to: niestandardowy host, który piszesz, dostarczany przez firmę zewnętrzną host, lub usługa Windows. http://msdn.microsoft.com/en-us/library/bb332338.aspx – Cheeso

15

Kind starej pytania, ale dla Googlersami ..

Właściwie, to jest możliwe, aby utworzyć projekt WCF i udostępniać je w IIS bez użycia .svc pliku.

Zamiast wdrażania swoją DataContract w SVC kodu źródłowego, wdrożyć go w normalnym pliku .cs (czyli za brak kodu).

Tak, to masz MyService.cs jak to:

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

Potem przychodzi rzecz, która to umożliwia. Teraz trzeba stworzyć Global.asax z kodu źródłowego, gdzie dodać hak zdarzenia 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))); 
    } 
} 

Jedną miłą rzeczą jest to, że nie trzeba obsłużyć .svc w adresach URL zasobów. Jedną niezbyt dobrą rzeczą jest to, że masz teraz plik Global.asax.

18

Jeśli używasz .NET 4.0 lub nowszy, można teraz „symulować” .svc poprzez config z następujących czynności:

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

Wtedy nie trzeba plik .svc fizycznej ani globalnym .asax

+1

Czy pliki .svc i global.asax można uznać za "przestarzałe"? –

Powiązane problemy