WebServiceHostFactory und IIS-Authentifizierung


11

Ich habe ein Problem mit der Verwendung der WebServiceHostFactory in IIS.

"IIS spezifizierte Authentifizierungsschemata 'IntegratedWindowsAuthentication, Anonymous', aber die Bindung unterstützt nur die Spezifikation von genau einem Authentifizierungsschema. Gültige Authentifizierungsschemata sind Digest, Negotiate, NTLM, Basic oder Anonym. Ändern Sie die IIS-Einstellungen, sodass nur a Es wird ein einzelnes Authentifizierungsschema verwendet. "

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.

Meine Frage ist, was ist dieses Ergebnis zu Webservicehostfactory erhalten tun? Ich hatte den Eindruck, dass WebServiceHostFactory die Bindung zu der gleichen WebHttpBinding festlegen würde, die ich in meiner Konfiguration verwendet habe.

Edit: Ich habe WebServiceHostFactory im Reflektor geschaut und es macht nichts schlaues. Es ist nur eine einfache Fabrik für den WebServiceHost.

Verwendet IIS immer noch einen Service-Host, wenn Sie den Endpunkt in Config einrichten? Oder ist der WebServiceHost anders eingerichtet.

3

Das hat bei mir funktioniert. Das Hinzufügen eines Dummy-Endpunkts zu einem frühen Zeitpunkt (bevor der Diensthost geöffnet wird), wie unten gezeigt, scheint den Zweck erfüllt zu haben. (Dieser MSDN-Artikel angedeutet diese http://msdn.microsoft.com/en-us/library/bb412178.aspx an.)

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

Ich vermute, dies verhindert Webservicehost von der Erstellung eines Standardendpunkts und damit schließt eine Reihe von Funktionen nach unten.

  0

Ich bin nicht in der Lage, diese Antwort zu testen, wie dies vor einer Weile gefragt wurde und ich arbeitete um das Problem, bekam dann einen neuen Job, aber wenn Sie sagen, dass es funktioniert, dann ist das gut genug für mich. 10 jun. 112011-06-10 16:06:57

  0

Ich verstehe nicht, wo ich verweisen sollte, dass MyWebServiceHost 27 mär. 122012-03-27 07:22:25

  0

Ich hatte das gleiche Problem, und ich konnte es zum Laufen bringen. Ich musste zwei Klassen schreiben: 'MyWebServiceHostFactory' und' MyWebServiceHost'. In der Factory-Klasse habe ich die Methode 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses) 'überschrieben und eine Instanz von' MyWebServiceHost 'zurückgegeben. 'MyWebServiceHost' sieht aus wie in dieser Antwort, aber ich habe 'ApplyConfiguration()' nicht überschrieben. 11 jul. 122012-07-11 17:46:51


1

Ich bin mir nicht sicher über die WebServiceHostFactory, aber es klingt wie Sie hosten den Service in IIS und es hat mehr als eine Authentifizierungsmethode ausgewählt. Wenn Sie IIS 5 oder 6 haben, versuchen Sie, in IIS zu gehen und die Eigenschaften für die Website oder das virtuelle Verzeichnis mit Ihrem Dienst anzuzeigen. Wechseln Sie zur Registerkarte Verzeichnissicherheit, klicken Sie unter "Anonyme Zugriffs- und Authentifizierungssteuerung" auf die Schaltfläche Bearbeiten, und deaktivieren Sie dann entweder "Anonymer Zugriff" oder "Integrierte Windows-Authentifizierung". Ich bin mir nicht sicher über IIS7.

+1

Problem mit diesem ist, dass Sie dann ** nicht debuggen anonym zugängliche ** Website. Eine ** unbefriedigende ** Umgehung besteht darin, mit einer einzigen Authentifizierung zu kompilieren, dann bevor Sie debuggen die andere, in IIS. Das funktioniert aber ist zeitverschwendend und nervig. Ich habe gesehen, .NET 3.5 Websites seit Jahren entwickelt, ohne dass dieses Problem jemals passiert. Mit .NET 4-Seiten ist meine Erfahrung schlechter. _ (Es gibt eine Möglichkeit, die Website-Authentifizierung von der MSBuild-Datei zu ändern, aber ich konnte keine vorgefertigte Aufgabe finden, um das zu tun.) _ 29 sep. 112011-09-29 02:25:47

  0

das hat den Trick für mich gemacht, großartiges Finden! 13 feb. 122012-02-13 16:01:36

+1

Sorry, aber es wird gesagt, er wollte beide Authentifizierungsschemata behalten ... Ihre Antwort war in dieser Hinsicht nicht hilfreich. 01 mär. 122012-03-01 15:32:11


1

Unter IIS7 finden Sie möglicherweise nicht, wo Sie die integrierte Windows-Authentifizierungseinstellung verwalten können. Um die Einstellung in der IIS7-Verwaltungskonsole anzuzeigen, müssen Sie die im folgenden Artikel beschriebenen Schritte ausführen: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (betitelt als "Fehler: Debugging fehlgeschlagen, da die integrierte Windows-Authentifizierung nicht aktiviert ist", wenn die Verknüpfung nicht funktioniert).

Ich hoffe, es hilft.


-1

deaktivieren Sicherheit in web.config-> Konfigurations-Tag

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

dann Wcf-Dienst benötigen keine Authentifizierung ...

  0

Dies ist nur ein Code ... bitte erläutern Sie. Es ist keine Antwort auf die Frage. 17 feb. 132013-02-17 12:12:46

  0

Sie müssen wirklich eine Form der Erklärung (anstatt nur ein Codebeispiel) zur Verfügung stellen, wenn Sie eine Antwort geben. 17 feb. 132013-02-17 12:13:05