2011-02-15 16 views
5

Estoy intentando crear un servicio wcf dentro de un proyecto web C# mvc. He añadido un nuevo elemento de tipo "servicio WCF" y ha añadido un método de prueba en la interfaz proporcionada:Alojamiento del servicio WCF dentro del proyecto web

[ServiceContract] 
public interface ITest 
{ 
    [OperationContract] 
    void DoWork(); 

    bool testWorking(); 
} 

y el servicio ofrecido:

public class Test : ITest 
{ 
    public void DoWork() 
    { 
    } 

    public bool testWorking() 
    { 
     return true; 
    } 
} 

Y entonces me he vuelto a el archivo web.config y añade lo siguiente a la etiqueta system.serviceModel:

<services> 
     <service name="Test" behaviorConfiguration="MyServiceTypeBehaviors"> 
     <endpoint address="" binding="wsHttpBinding" contract="ITest"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="MyServiceTypeBehaviors" > 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

en este punto, como yo lo entiendo, yo debería ser capaz de ver esto en un navegador y obtener un mensaje de prueba que me decía que es hora de que yo implementó un cliente para usar este servicio. Sin embargo, lo que realmente sucede es que mi navegador descarga el archivo .svc.

dos preguntas:

1) ¿Qué diablos estoy haciendo mal? ¿Por qué no estoy viendo el mensaje esperado?

2) ¿Hay alguna forma en que pueda iniciar automáticamente la herramienta de prueba WCF para que se ejecute en este servicio? Las únicas pautas que puedo encontrar son para comenzar desde un proyecto de WCF.

Actualización: (contenido del archivo SVC - agarró del comentario)

<%@ ServiceHost Language="C#" Debug="true" 
    Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %> 
+1

¿Está alojando el servicio en IIS? Parece que no tienes instalados controladores correctos para .svc. También tenga en cuenta que el atributo de nombre del servicio y el atributo de contrato del punto final deben contener nombres de tipo con espacios de nombres incluidos, pero no es fuente de su problema actual. –

+0

Me pregunté sobre los espacios de nombres, pensé que, dado que estaba alojado en el mismo proyecto, no eran necesarios, pero gracias por la aclaración. Estoy ejecutando esto en IIS utilizando el servidor predeterminado provisto por Visual Studio ... no estoy del todo seguro de cómo se instalaría los manejadores correctos si no están allí. –

+0

El 'Servicio = ...' en su archivo SVC debe ** también ** hacer referencia al nombre completo de su servicio ** clase ** - p. 'Service = YourNamespace.Test'. ¿Es ese el caso en tu archivo svc? La entrada del servicio aquí no es ningún tipo de URL web ni nada por el estilo ... –

Respuesta

1

De lo que usted ha descrito que debe estar bien, pero ya no estás:

  1. Lo servidor estás usando? IIS, Cassini?
  2. ¿Cuál es el contenido del archivo svc que descarga? (ábralo en el bloc de notas)

Para iniciar la herramienta de prueba desde dentro del estudio visual, haga clic derecho en el archivo .svc y 'configure como página de inicio' y luego presione f5. Eso debería abrir la herramienta de prueba y permitirle inspeccionar su servicio. Eso debería darte algunas pistas sobre cuál es el problema.

+0

1) IIS, 2) Son los encabezados de ASP.NET para el marcado en el servicio .svc, con <% @ ServiceHost Language = "C#" Debug = "true" Service = "myemployersaddress.com.Test" CodeBehind = "Test.svc.cs"%> ... y si lo configuro como página de inicio y presiono f5 mi sitio web comienza y ... descarga el archivo .svc. –

+0

@Matt Thrower: por favor, no pongas cosas como esta en un comentario, es casi imposible de leer ... en su lugar: actualiza tu pregunta original con la información adicional editándola (como lo hice yo en este caso) - ¡eso es mucho más fácil para los ojos! –

0

Esto suena como un problema de configuración del servidor web;

  • es la aplicación marcada como una aplicación en IIS (¿tiene un engranaje)? - debe
  • es la aplicación configurada para usar la versión correcta de ASP.NET (es decir, no 1.x)
  • ¿está instalado .NET 3.0 o superior en el servidor?
  • ¿el framework master web.config contiene las asignaciones de .vcc?

re el último, he visto un problema técnico aquí, cuando la instalación no toca el config en todo si no es bastante la forma en que espera para encontrarlo; así que si ha cambiado manualmente el maestro web.config en el servidor, puede necesitar aplicar los cambios 3.0 manualmente

, por ejemplo, en <buildProviders> debe tener algo así como (para 3.0):

<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 

en <httpHandlers> que debe tener algo como (por 3,0):

<add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/> 

y no debe haber una serie de cosas adicionales en <compilation>/<assemblies>, tales como:

<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/> 
<add assembly="System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/> 
<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 
<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
<add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 

esto proviene de un análisis rápido, puede haber otros y los valores exactos pueden cambiar según el entorno.

+0

Curiosamente ya hay un servicio svc agregado bajo httpHandlers - es la versión 2 y está asignado a un .svc en particular en lugar de * .svc ... pero ninguno de los otros elementos está ahí. –

+0

@Matt: primero, verifique que .NET 3.0 esté realmente * instalado * en el servidor; es posible que solo puedas instalarlo. La corrección manual es solo si está allí pero no actualizó .config –

+0

@Matt: Y énfasis: este es ** master ** web.config, entonces para ASP.NET 2.x,% systemroot% \ Microsoft .NET \ Framework \ v2.0.50727 \ CONFIG \ web.config –

Cuestiones relacionadas