it-swarm.com.de

WCF - Windows-Authentifizierung - Sicherheitseinstellungen erfordern Anonym

Ich habe Schwierigkeiten, den WCF-Dienst auf IIS auf unserem Server auszuführen. Nach der Bereitstellung bekomme ich eine Fehlermeldung:

Für die Sicherheitseinstellungen für diesen Dienst ist die anonyme Authentifizierung erforderlich. Sie ist jedoch für die Anwendung IIS, die diesen Dienst hostet, nicht aktiviert.  

Ich möchte die Windows-Authentifizierung verwenden und habe daher den anonymen Zugriff deaktiviert. Beachten Sie auch, dass es aspNetCompatibilityEnabled gibt (falls dies einen Unterschied macht).

Hier ist meine web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
        <webHttpBinding>
            <binding name="default">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="defaultServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
             contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
        </service>
    </services>
</system.serviceModel>

Ich habe im ganzen Internet ohne Glück gesucht. Hinweise werden sehr geschätzt.

43
Rashack

Es scheint also ein ziemlich gewöhnliches Problem zu sein. Es geht darum, mex aus Ihren Bindungen zu entfernen:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

Alternativ aktivieren Sie den anonymen Zugriff in IIS und stellen in Ihrer web.config sicher, dass der anonyme Zugriff verweigert wird.

Hoffe, das hilft einer anderen Seele ... (Ich war mir 100% sicher, dass ich es mit mex entfernt habe.: -O)

42
Rashack

Sie können dies one ..__ überprüfen. Ich habe es geschafft, wie erwartet zu funktionieren.

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>
14
Padel

nutzen Sie Ihre Service-Bindings auch für mex.

Ändern Sie also Ihre aktuelle Konfiguration:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

zu 

<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>

Das sollte das Problem lösen

11
sandyiit

Die anonyme Authentifizierung kann und muss in einigen Fällen für den Dienst aktiviert werden, nicht jedoch für die Site.

Vergewissern Sie sich daher, dass für die "root" -Authentifizierung Ihrer Site nur die Windows-Authentifizierung aktiviert ist. Erweitern Sie dann Ihre Site, wählen Sie den Ordner "Service" aus, und stellen Sie sicher, dass für Ihren Dienst Windows und die anonyme Authentifizierung aktiviert sind.

Ich hatte eine identische Umgebung, in der dies funktionierte. Der einzige Unterschied in diesen Umgebungen war die Authentifizierung des Dienstes. Problem in meinem Fall wurde nicht durch ausgewählte Anbieter (Ntlm oder Negotiate) sondern die Authentifizierungseinstellungen für Site und Service verursacht.

Zumindest hatte ich eine identische Fehlermeldung mit der MSSQL Master Data Services-Website und -Service. Dies war die Lösung. Ich habe die Fehlermeldung erhalten, als ich nur den Dienst ausführte, aber die Seite funktionierte fast in Ordnung. Der MDS-Explorer funktionierte nicht, da die Authentifizierungseinstellungen des Dienstes zunächst falsch waren. Ursache dieser Fehlkonfiguration ist möglicherweise ein Fehler in MDS Configuration Manager beim Erstellen einer neuen MDS-Site.

In meinem Fall sollte das Problem also nicht durch eine spezielle Bearbeitung der Dateien web.config oder ApplicationHost.config behoben werden. Ich habe die Konfigurationsdateien nicht bearbeitet. Sie haben einfach die richtigen Authentifizierungseinstellungen für die Website und ihren Dienst im IIS - Manager ausgewählt. Ich bin nicht sicher, ob dies hier der Fall ist, aber vielleicht einen Versuch wert?

2
Atte

Es hat für mich funktioniert, wenn ich den Endpunkt 'mex' entferne und auch clientCredentialType = 'Ntlm'

1
Sagar S.

Ja, anscheinend müssen Sie den mex-Endpunkt vollständig entfernen. Rahmen 

<serviceMetadata httpGetEnabled="false"/>

alleine hat nicht funktioniert. Vielen Dank!

0
Narayana

Es scheint, dass dieses MEX-Bindungsproblem in .NET 4.0 behoben wurde. Durch das Ändern der App Pool .NET CLR-Version unseres Servers von 2.0 auf 4.0 wurde das Problem behoben. 

0
csrowell

Zusatzlösung:

Sie müssen lediglich sicherstellen, dass der Name und der Vertrag des Dienstes korrekt sind.

Ich hoffe es hilft irgendwie.

0
SyntaxError