2009-02-22 18 views
11

Ho riscontrato un problema con l'utilizzo di WebServiceHostFactory in IIS.WebServiceHostFactory e autenticazione IIS

"IIS ha specificato gli schemi di autenticazione 'IntegratedWindowsAuthentication, Anonymous', ma il bind supporta solo la specifica di esattamente uno schema di autenticazione Gli schemi di autenticazione validi sono Digest, Negotiate, NTLM, Basic o Anonymous. viene utilizzato lo schema di autenticazione singola. "

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.

La mia domanda è che cosa sta facendo WebServiceHostFactory per ottenere questo risultato? Ho avuto l'impressione che WebServiceHostFactory avrebbe impostato il binding sulla stessa webHttpBinding che ho usato nella mia configurazione.

Modifica: Ho visto WebServiceHostFactory nel riflettore e non sta facendo nulla di intelligente. È solo una semplice fabbrica per WebServiceHost.

IIS usa ancora un host di servizio se si imposta l'endpoint in config? Oppure il WebServiceHost imposta le cose in modo diverso.

risposta

3

Questo è ciò che ha funzionato per me. L'aggiunta anticipata di un endpoint fittizio (prima dell'apertura dell'host del servizio), come mostrato di seguito, sembra aver risolto il problema. (Questo articolo di MSDN ha accennato a questo 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 
    } 
} 

Sto indovinando questo impedisce WebServiceHost di creare un endpoint di default, e quindi arresto di un gruppo di funzionalità.

+0

Non riesco a testare questa risposta come è stato chiesto un po 'di tempo fa e ho lavorato sul problema, poi ho ottenuto un nuovo lavoro ma se dici che funziona, allora è abbastanza buono per me. –

+0

Non capisco dove dovrei fare riferimento a MyWebServiceHost – JDC

+0

Ho avuto lo stesso problema e sono riuscito a farlo funzionare. Ho dovuto scrivere due classi: 'MyWebServiceHostFactory' e' MyWebServiceHost'. Nella classe factory, ho scavalcato il metodo 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses)' e ho restituito un'istanza di 'MyWebServiceHost'. 'MyWebServiceHost' assomiglia a quello in questa risposta, ma non ho ignorato' ApplyConfiguration() '. –

1

Non sono sicuro di WebServiceHostFactory, ma sembra che tu stia ospitando il servizio in IIS e ha selezionato più di un metodo di autenticazione. Se hai IIS 5 o 6, prova ad andare in IIS e visualizzare le proprietà per il sito web o la directory virtuale che contiene il tuo servizio. Vai alla scheda Sicurezza directory, fai clic sul pulsante Modifica in "Controllo accesso e autenticazione anonimo", quindi deseleziona "Accesso anonimo" o "Autenticazione integrata di Windows". Non sono sicuro di IIS7.

+1

problema che è che poi ** non può eseguire il debug di sito Web di accesso anonimo **. Un ** non soddisfacente ** aggiramento è quello di compilare con una singola autenticazione, quindi appena prima di eseguire il debug, accendi l'altro su IIS. Funziona ma è tempo sprecante e fastidioso. Ho visto .NET 3.5 siti sviluppati per anni senza che questo problema si verifichi mai. Con .NET 4 siti la mia esperienza è stata peggiore. _ (C'è la possibilità di alterare l'autenticazione del sito web dal file MSBuild, ma non sono riuscito a trovare un'attività pronta per farlo.) _ –

+0

che ha fatto il trucco per me, grande scoperta! – Adi

+1

Scusa ma si dice che abbia voluto mantenere entrambi gli schemi di autenticazione ... La tua risposta non è stata di aiuto in tal senso. – LDAdams

1

In IIS7 non è possibile trovare la posizione in cui è possibile gestire l'impostazione di Autenticazione integrata di Windows. Per visualizzare le impostazioni nella console di gestione IIS7, è necessario seguire i passaggi descritti nel seguente articolo: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (denominato "Errore: debug non riuscita perché l'autenticazione integrata di Windows non è abilitata", se il collegamento non è funzionante).

Spero che aiuti.

-1

disabilitare la sicurezza in web.config-> tag di configurazione

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

allora il vostro servizio WCF non ha bisogno di autenticazione ...

+0

Questo è solo un codice ... si prega di fornire alcune spiegazioni. Non è una risposta alla domanda. –

+0

È necessario fornire una qualche forma di spiegazione (piuttosto che un semplice esempio di codice) quando si fornisce una risposta. –

Problemi correlati