it-swarm.com.de

WCF-Fehler: Der Anrufer wurde vom Dienst nicht authentifiziert

Ich versuche, von meiner Client-Konsolenanwendung zum Testen auf meinen WCF-Dienst auf einem Server zuzugreifen. Ich erhalte folgende Fehlermeldung: 

Der Anrufer wurde nicht von .__ authentifiziert. der Service

Ich verwende wsHttpBinding. Ich bin nicht sicher, welche Art von Authentifizierung der Dienst erwartet.



<behaviors>
  <serviceBehaviors>
    <behavior name="MyTrakerService.MyTrakerServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

AktualisierenEs funktioniert, wenn ich meine Bindung in <endpoint "basicHttpBinding" ... /> (von wsHttpBinding) Auf dem IIS 7.0 gehosteten Windows 2008-Server ändere

43
Blankman

Wenn Sie basicHttpBinding verwenden, konfigurieren Sie die Endpunktsicherheit auf "None" und transportieren Sie "clientCredintialType" auf "None".

<bindings>
    <basicHttpBinding>
        <binding name="MyBasicHttpBinding">
            <security mode="None">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint 
            binding="basicHttpBinding" 
            bindingConfiguration="MyBasicHttpBinding"
            name="basicEndPoint"    
            contract="IMyService" 
        />
</service>

Stellen Sie außerdem sicher, dass das Verzeichnis Authentication Methods in IIS aktiviert ist, um den anonymen Zugriff zu aktivieren

25

Ich habe es verstanden.

Wenn Sie wshttpbinding verwenden möchten, müssen Sie die Windows-Anmeldeinformationen wie folgt hinzufügen.

svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";

vielen Dank

23
Sandip

Haben Sie versucht, basicHttpBinding anstelle von wsHttpBinding zu verwenden? Wenn keine Authentifizierung erforderlich ist und die Ws * -Implementierungen nicht erforderlich sind, sind Sie wahrscheinlich mit einfachen alten basicHttpBinding besser aufgehoben. WsHttpBinding implementiert WS-Security für die Nachrichtensicherheit und -authentifizierung.

4
kd7

stellen Sie anonymen Zugriff in Ihrem virtuellen Verzeichnis ein

schreiben Sie folgende Zugangsdaten zu Ihrem Dienst 

ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";

danach rufen Sie Ihre Webservice-Methoden auf.

2
kishore

Wir hatten ein seltsames Problem, bei dem der Ordner, von dem aus der WCF-Dienst gehostet wurde, über einige Berechtigungen verfügte, die das Problem verursachten.

1
TruthOf42

Wenn Sie eine selbst gehostete Site wie mich verwenden, können Sie dieses Problem (wie oben beschrieben) vermeiden, indem Sie sowohl auf der Host- als auch auf der Clientseite festlegen, dass der Sicherheitsmodus wsHttpBinding = NONE ist. 

Beim Erstellen der Bindung können Sie auf dem Client und auf dem Host diesen Code verwenden: 

 Dim binding as System.ServiceModel.WSHttpBinding 
 binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)

oder

 System.ServiceModel.WSHttpBinding binding
 binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
1
Brian

Ich konnte das freigegebene Problem mithilfe der folgenden Schritte beheben:

  1. Gehen Sie zu IIS -> Sites -> Your Site ->
  2. Funktionsansicht -> Authentifizierung
  3. Setzen Sie anonyme Authentifizierung auf Deaktiviert
  4. Setzen Sie Windows-Authentifizierung auf Aktiviert.

 enter image description here

1
Ajay Shankar

falls erforderlich, um die Domäne (die den Benutzernamen und das Kennwort, die der Client verwendet, automatisch anzugeben) in webconfig anzugeben, können Sie dies in den Dienstabschnitt "system.serviceModel services" eingeben:

<identity>          
<servicePrincipalName value="example.com" />
</identity>

und im Client Domain und Benutzername und Passwort angeben:

 client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
 client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
 client.ClientCredentials.Windows.ClientCredential.Password = "Password";
0
farhang67

Dies kann auftreten, wenn sich der Client in einer anderen Domäne als der Server befindet.

Dies ist mir beim Testen einer meiner Anwendungen von meinem PC (Client) auf meinem (Cloud-) Testserver aufgefallen, und die einfachste Lösung, die ich mir vorstellen konnte, war das Einrichten eines VPN. 

0
yiannis

Ich hatte auch das gleiche Problem in wsHtppBinding. Und ich musste nur den security-Modus hinzufügen, der auf none zeigt, das mein Problem gelöst hat und nicht auf basicHttpBinding umgestellt werden muss. Check Here und prüfen, wie die WCF-Sicherheit deaktiviert werden kann. Überprüfen Sie die nachstehende Konfigurationsänderung als Referenz:

<wsHttpBinding>
    <binding name="soapBinding">
        <security mode="None">
            <transport clientCredentialType="None" />
            <message establishSecurityContext="false" />
        </security>
    </binding>
</wsHttpBinding>
0
Nani