2010-01-21 14 views

Respuesta

32

. Los archivos .svc se utilizan cuando aloja su servicio WCF en IIS.

Consulte el documento de Microsoft here y here.

Hay un módulo dentro de IIS que maneja el archivo .svc. En realidad, es el módulo ISAPI ASPNET, que da frente a la solicitud del archivo .svc a uno de los tipos de fábrica de controlador que se ha configurado para ASPNET, en este caso

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


Si usted es anfitrión de su servicio WCF en algo distinto de IIS, a continuación, no es necesario el archivo .svc.

+0

¿En qué más puedo alojar mi servicio? –

+3

Tres de los que se me ocurren son: un host personalizado que usted escribe, un host proporcionado por un tercero que usted compra, o un servicio de Windows. http://msdn.microsoft.com/en-us/library/bb332338.aspx – Cheeso

15

especie de viejas preguntas, pero para los empleados de Google ..

En realidad, es posible crear un proyecto WCF y alojarlo en IIS sin utilizar un archivo .svc.

En lugar de implementar su DataContract en su SVC de código subyacente, que implementarlo en un archivo .cs normal (es decir, sin código detrás.)

Por lo tanto, tendría un MyService.cs como este:

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

Luego viene la cosa que hace esto posible. Ahora lo que necesita para crear un Global.asax con código subyacente, donde se agrega un enlace de eventos 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))); 
    } 
} 

Lo bueno de esto es que usted no tiene que manejar el .svc en sus URL de recursos. Una cosa no tan agradable es que ahora tiene un archivo Global.asax.

18

Si está utilizando .NET 4.0 o posterior, ahora se puede "simular" la .svc a través de configuración con el siguiente:

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

Entonces no es necesario un archivo .svc física ni mundial .asax

+1

¿Pueden verse los archivos .svc y global.asax en este asunto como "obsoletos"? –

Cuestiones relacionadas