2 Stimmen

Der Anrufer wurde nicht durch den Dienst authentifiziert

Entschuldigung für die Wiederholung, aber ich habe Mühe, das, was ich in den anderen Beiträgen gelesen habe, auf mein Problem anzuwenden.

Ich habe einen selbst gehosteten WCF-Dienst, der gut läuft, wenn er auf meinem Rechner gehostet wird und der Client auf meinem Rechner ist.

Ich habe versucht, den Client auf einen anderen Rechner zu verschieben, und erhalte nun die Fehlermeldung "Der Anrufer wurde vom Dienst nicht authentifiziert".

Könnte mir bitte jemand sagen, wo das Problem auftritt?

Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen.

Mit freundlichen Grüßen

Esche

Die folgende Client-Konfiguration auf meinem Rechner funktioniert

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IDataCollector" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
          messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://192.168.1.74:8080/" binding="wsDualHttpBinding"
        bindingConfiguration="WSDualHttpBinding_IDataCollector" contract="AshService.IDataCollector"
        name="WSDualHttpBinding_IDataCollector">
        <identity>
          <userPrincipalName value="Ash-PC\Ash" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Hier ist die Serverkonfiguration

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IDataCollector" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
                algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <services>
      <service name="DataCollector">
        <endpoint address="http://192.168.1.74:8080" binding="wsDualHttpBinding"
          bindingConfiguration="WSDualHttpBinding_IDataCollector" contract="IDataCollector" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

2voto

GunnerL3510 Punkte 705

Sie haben Recht, dass Ihre Probleme auf die Windows-Authentifizierung zurückzuführen sind. Wie Rest Wing beschrieben hat, müssen Sie, wenn Sie AD-Anmeldedaten verwenden wollen, auf die der Dienst Zugriff hat, diese Anmeldedaten angeben, damit der Dienst den Client authentifizieren kann.

Wenn Sie die Windows-Authentifizierung nicht verwenden können und Sie muss den Client zu authentifizieren, müssen Sie andere Authentifizierungstechniken in Betracht ziehen. Eine Methode ist Benutzername/Passwort, aber Sie müssen Ihre eigenen Authentifizierungsalgorithmen entwickeln. Eine andere ist die Verwendung von Zertifikaten; der Server und der Client müssen Zertifikate installiert haben (X509-Zertifikate funktionieren), um sich gegenseitig zu identifizieren. Es gibt auch noch andere Methoden, aber wenn ich mich richtig erinnere, funktionieren nur die beiden oben genannten mit Rechnern, die sich nicht in der gleichen Domäne befinden.

Wenn Sie den Client nicht authentifizieren müssen, setzen Sie den Sicherheitsmodus auf "Keine". Dies wäre eine Technik für öffentlich zugängliche Dienste, die über das Internet verfügbar sind.

1voto

Rest Wing Punkte 2660

Sie haben unterschiedlich konfigurierte Bindungen auf Client- und Serviceseite.
Versuchen Sie, auf beiden Seiten dieselbe Bindungskonfiguration zu verwenden, und prüfen Sie, ob die Ausnahme verschwunden ist.

EDITAR : Die für die Client-Authentifizierung auf der Dienstseite zu verwendenden Anmeldeinformationen müssen ebenfalls angegeben werden.

// Provide client credentials
NetworkCredential credentials = new NetworkCredential( "UserName", "RealPasswordHere", "DomainOrMachineName" );

// Create factory that will be used to create proxy to the service
// Pass the client credentials into the factory
var factory = new ChannelFactory<AshService.IDataCollector>( "WSDualHttpBinding_IDataCollector" );
factory.Credentials.Windows.ClientCredential = credentials;

// Create and open proxy to the service
AshService.IDataCollector proxy = factory.CreateChannel();
( proxy as IChannel ).Open();

// Invoke an operation from the service

1voto

santosh singh Punkte 26504

Versuchen Sie dies

svc.ClientCredentials.Windows.ClientCredential.UserName = "username";
svc.ClientCredentials.Windows.ClientCredential.Password = "password";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X