2009-01-16 20 views
19

tratando de que mi servicio WCF se ejecuta en IIS 6.WCF no se ejecuta en IIS 6.0

yo he creado al .svc y aspnet_isapi.dll mapeo de acuerdo a: http://msdn.microsoft.com/en-us/library/ms752241.aspx

Al ver la página Server1.svc, estoy consiguiendo una 404.

He probado el sitio con una simple página .aspx para asegurarme de que la URL funciona, pero de nuevo la extensión .svc no lo está.

Tengo .NET 3.5 SP1 instalado, mi web.config está haciendo referencia a los ensamblados 3.5, y no aparece un error cuando veo una página .aspx, por lo que presumiblemente está recogiendo esos ensamblajes.

¿Qué podría estar mal?

+1

¿Es esto en un servidor remoto orlocalhost? Si es remoto, ¿ha verificado que todo funciona localmente primero? –

Respuesta

6

hay dos cosas que se me ocurren:

La extensión .svc no está correctamente configurado (menos probable según su descripción). Puede consultar este post para más detalles.

O su sitio web tiene múltiples encabezados de host. Para resolver este problema, debe tener un solo encabezado de host o usar una fábrica. He aquí un ejemplo:

namespace MyNamespace 
{ 
    public class MultipleHostServiceFactory : ServiceHostFactory 
    { 
     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
     { 
      List<Uri> addresses = new List<Uri>(); 
      addresses.Add(baseAddresses[0]); 
      return base.CreateServiceHost(serviceType, addresses.ToArray()); 
     } 
    } 
} 

A continuación, debe configurar la fábrica en el marcado de su archivo .svc:

<%@ ServiceHost Language="C#" 
       Debug="false" 
       Factory="MyNamespace.MultipleHostServiceFactory" 
       Service="MyNamespace.MyService" 
       CodeBehind="MyService.svc.cs" %> 
+0

no hay encabezados de host de lo que puedo ver, simplemente usando el IP – Blankman

+1

Puede que no haya resuelto el problema del OP, ¡pero tiene el mío! – RSolberg

20

Es más que probable la extensión .svc no está registrado bajo IIS como se manejan por ASP.NET (WCF).

Pruebe estos 2 pasos (sustituir Marco con Framework64 si es necesario):

Ir a:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 

y luego ejecutar:

aspnet_regiis -i 

Ir a: C: \ Windows \ Microsoft.NET \ Framework \ v3.0 \ Windows Communication Foundation

y luego ejecutar:

ServiceModelReg.exe -i 
+0

¡Esto funcionó para mí! Gracias –

+0

¡Esto fue un salvavidas! Solo tuve que ejecutar "aspnet_regiis" y lo arreglé. –

+1

si ejecuta -i ¿eso no "romperá" todas las instalaciones .net anteriores? todo nuestro sitio web ejecuta .net 1 ... Necesito que wcf funcione. debería correr con -i banderas? No quiero cambiar ninguna cosa existente. – BabelFish

17

Bajo Internet Information Service (IIS) Manager, abra el nodo llamado Web Service Extension. Asegúrese de que ASP.NET v2.0.5.0727 esté configurado como Permitido. Pasé horas buscando diferentes configuraciones y descubrí que estaba configurado como Prohibido. Simplemente haga clic en el botón Permitir para habilitar ASP.NET.

+0

¡Gracias, acabas de arreglar mi implementación! – stuartd

+0

@Stuart Dunkeld, eres bienvenido. Me alegra que haya ayudado. –

+0

Esto también puede suceder con ASP.NET v4 ... –

3

Tuve el mismo problema. Terminé siendo que estaba ejecutando una versión de 64 bits de Windows 2003 Server, y tenía mis ensamblados configurados para "Cualquier CPU". Una vez que cambié los ensambles a x86 y subí al servidor, todo funcionó.

No sé por qué nadie lo ha mencionado en ningún otro lado en los 30 hilos que leí, pero mi amigo me lo recomendó, y funcionó a las mil maravillas.

Solo tirando por ahí en caso de que alguien tenga el mismo problema.

0

Tuve el mismo problema y lo resolví al permitir extensiones ISAPI. En Administrador de Internet Information Service (IIS), abra el nodo denominado Web Service Extension. Asegúrese de que "Todas las extensiones ISAPI desconocidas" esté configurada en Permitido.

0

que se enfrentaron durante horas con este hasta que finalmente he utilizado este ejemplo y funcionó vaya primero: http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

sé enlace únicas respuestas no son buenos y otros han utilizado este enlace CP a solve this type of problem here at Stackoverflow por lo aquí están los pasos básicos si el artículo nunca se pone:

PASO 1

En primer lugar lanzamiento de Visual Studio 2010. Haga clic en Archivo-> Nuevo-> Proyecto. Crear una nueva "Aplicación de servicio WCF".

PASO 2

Una vez creado el proyecto, se puede ver en la solución que Al servicio WCF predeterminado y archivo de interfaz ya se han creado (Service1.cs & IService.cs). Elimine estos dos archivos y crearemos nuestra propia interfaz y archivo de servicio WCF.

PASO 3

Ahora haga clic derecho en la solución y crear un nuevo archivo de servicio WCF. He dado nombre al archivo de servicio como "RestServiceImpl.svc".

PASO 4

Como he explicado al principio del artículo que vamos a estar escribiendo una API que puede devolver datos en XML y formato JSON, aquí es la interfaz para eso. En IRestServiceImpl, agregue el siguiente código

En el código anterior, puede ver dos métodos diferentes de IRestService que son XMLData y JSONData. XMLData devuelve el resultado en XML mientras que JSONData en JSON.

[ServiceContract] 
public interface IRestServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "xml/{id}")] 
    string XMLData(string id); 

    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "json/{id}")] 
    string JSONData(string id); 
} 

STEP 5

Abiertas las RestServiceImpl.svc.cs de archivos y escribir el siguiente código de allí:

public class RestServiceImpl : IRestServiceImpl 
{ 
    public string XMLData(string id) 
    { 
     return "You requested product " + id; 
    } 

    public string JSONData(string id) 
    { 
     return "You requested product " + id; 
    } 
} 

PASO 6

Web.Config

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehaviour"> 
     <!-- Service Endpoints --> 
     <!-- Unless fully qualified, address is relative to base address supplied above --> 
     <endpoint address ="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="web"> 
      <!-- 
       Upon deployment, the following identity element should be removed or replaced to reflect the 
       identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
       automatically. 
      --> 
     </endpoint> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

PASO 7

En IIS:

enter image description here

Cuestiones relacionadas