2009-02-22 8 views
11

Tengo un problema con el uso de WebServiceHostFactory en IIS.WebServiceHostFactory e autenticación IIS

"IIS especificó esquemas de autenticación 'IntegratedWindowsAuthentication, Anonymous', pero el enlace solo admite la especificación de exactamente un esquema de autenticación. Los esquemas de autenticación válidos son Digest, Negotiate, NTLM, Basic o Anonymous. Cambie la configuración de IIS para que solo se usa un esquema de autenticación simple ".

I wanted to keep both authentication schemes and managed to do so by not using the factory but setting up the endpoint manualy in web.config.

Mi pregunta es ¿qué está haciendo WebServiceHostFactory para obtener este resultado? Tenía la impresión de que WebServiceHostFactory establecería el enlace al mismo webHttpBinding que utilicé en mi configuración.

Edit: He visto WebServiceHostFactory en el reflector y no está haciendo nada inteligente. Es simplemente una fábrica simple para WebServiceHost.

¿IIS sigue utilizando un host de servicio si configura el punto final en config? O es el WebServiceHost configurando las cosas de manera diferente.

Respuesta

3

Esto es lo que funcionó para mí. Agregar un punto final ficticio desde el principio (antes de que se abra el host del servicio) como se muestra a continuación parece haber hecho el truco. (Este artículo de MSDN dio a entender en este http://msdn.microsoft.com/en-us/library/bb412178.aspx.)

public class MyWebServiceHost : WebServiceHost 
{ 
    public MyWebServiceHost (Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) 
    { 
     // Inserting this dummy endpoint config seemingly does the trick: 
     AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), string.Empty); 
    } 

    protected override void ApplyConfiguration() 
    { 
     // Typical programmatic configuration here per: 
     // http://msdn.microsoft.com/en-us/library/aa395224.aspx 
    } 
} 

supongo esto impide WebServiceHost de crear un punto final predeterminado, y por lo tanto el cierre de un montón de funcionalidad.

+0

No puedo probar esta respuesta, ya que esto fue preguntado hace un tiempo y trabajé en torno al problema, luego conseguí un nuevo trabajo, pero si dices que funciona, entonces eso es suficiente para mí. –

+0

No entiendo dónde debería hacer referencia a MyWebServiceHost – JDC

+0

Tuve el mismo problema y pude hacerlo funcionar. Tuve que escribir dos clases: 'MyWebServiceHostFactory' y' MyWebServiceHost'. En la clase de fábrica, superé el método 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses)' y le pedí que devolviera una instancia de 'MyWebServiceHost'. 'MyWebServiceHost' se parece al de esta respuesta, pero no anulé' ApplyConfiguration() '. –

1

No estoy seguro acerca de WebServiceHostFactory, pero parece que está alojando el servicio dentro de IIS y tiene seleccionado más de un método de autenticación. Si tiene IIS 5 o 6, intente acceder a IIS y vea las propiedades del sitio web o directorio virtual que contiene su servicio. Vaya a la pestaña Seguridad del directorio, haga clic en el botón Editar en "Acceso anónimo y control de autenticación" y luego desmarque "Acceso anónimo" o "Autenticación integrada de Windows". No estoy seguro acerca de IIS7.

+1

problema con esto es que, a continuación ** No se puede depurar una acceso anónimo ** al sitio web. Una solución ** insatisfactoria ** es compilar con una sola autenticación, justo antes de depurar, activar la otra, en IIS. Esto funciona, pero es pérdida de tiempo y molesto. He visto sitios .NET 3.5 desarrollados durante años sin que este problema ocurra. Con .NET 4 sitios mi experiencia ha sido peor. _ (Existe la posibilidad de alterar la autenticación del sitio web desde el archivo MSBuild, pero no pude encontrar una tarea lista para hacerlo.) _ –

+0

que me sirvió, ¡excelente descubrimiento! – Adi

+1

Lo siento, pero se dice que quería mantener ambos esquemas de autenticación ... Su respuesta no fue útil en ese sentido. – LDAdams

1

En IIS7, es posible que no encuentre dónde puede administrar la configuración de Autenticación de Windows integrada. Para ver la configuración en la consola de administración IIS7, debe seguir los pasos que se describen en el siguiente artículo: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (titulado "Error: Error al depurar porque la autenticación integrada de Windows no está habilitada", si el enlace no funciona).

Espero que ayude.

-1

de desactivación de seguridad en web.config-> tag de configuración

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="Windows"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 

entonces su servicio WCF no necesita autentificación ...

+0

Esto es solo un código ... por favor brinde alguna explicación. No es una respuesta a la pregunta. –

+0

Realmente necesita proporcionar alguna forma de explicación (en lugar de solo una muestra de código) al proporcionar una respuesta. –

Cuestiones relacionadas