Wie löse ich SecurityNegotiationException und InvalidCredentialException in WCF

So, ich hab geschrieben ein kleines Spiel und wünschen für das Spiel spielbar über das internet.

Ich habe getestet das Spiel nur über localhost mit diesen configs:

Client Winapp Anwendung:

App.Config-Datei

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.serviceModel>
    <client>
        <endpoint name ="CommandBoard"
                  address="net.tcp://localhost:9000/commandboard"
                  binding = "netTcpBinding"
                  contract="CommandBoardServiceLibrary.ICommandBoardService"/>
    </client>
  </system.serviceModel>
</configuration>

Während in der Client Winform-Code habe ich es anschließen, wie dies

ChannelFactory<ICommandBoardService> remoteFactory= new ChannelFactory<ICommandBoardService>("CommandBoard");
ICommandBoardService proxy = remoteFactory.CreateChannel();

Nächsten, Gastgeber der service, den ich erstellen Sie eine Konsolenanwendung.

App.config ist basic. Habe nichts verändert, nur in den eigentlichen code.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Console app-code:

static void Main(string[] args)
{
    using (ServiceHost host = new ServiceHost(typeof(CommandBoardServiceLibrary.CommandBoardService)))
    {
        host.AddServiceEndpoint(typeof(
            CommandBoardServiceLibrary.ICommandBoardService),
            new NetTcpBinding(),
            "net.tcp://localhost:9000/commandboard");
        host.Open();

        Console.ReadLine();
     }
}

Sowohl der client und der host gleichzeitig funktioniert perfekt auf meinem computer.

Wenn ich jetzt ändern Sie die client-App.Config

<client>
    <endpoint name ="CommandBoard"
              address="net.tcp://23.122.59.211:9000/commandboard"
              binding = "netTcpBinding"
              contract="CommandBoardServiceLibrary.ICommandBoardService"/>
</client>

und führen Sie es auf einem anderen computer in einem anderen Netzwerk bekomme ich die folgende Fehlermeldung:
System.ServiceModel.Security.SecurityNegotiationException: The server has rejected the client credentials. ---> System.Security.Authentication.InvalidCredentialException: The server has rejected the client credentials. ---> System.ComponentModel.Win32Exception: The logon attempt failed

Wo ist die Quelle dieses Fehlers? Konfiguriert es falsch? Oder bin ich etwas fehlt?

EDIT: Web.config für den WCF-Dienst

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="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>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>
  • Was ist die server-WCF-Konfiguration?
  • Wie würde ich herausfinden, dass für Sie? Ich habe gerade angefangen zu lernen, WCF, also bin ich nicht allzu verwendet das layout alles. Sind Sie auf der Suche für das Web.Config-Datei in meinem CommandBoardServiceLibrary?
  • Es ist der server, definiert die Anforderungen an die Sicherheit. Ja, es ist das web.in der config von dem server.
  • Idk, wenn Sie bemerkt, aber ich habe es, bevor Sie kommentiert wieder.
  • Sie immer noch Verstand, mir zu helfen?
  • Sicher, ich kann es wieder. Ist die Antwort unten nicht für Sie arbeiten?
  • Ich habe noch, es zu versuchen. Ich Las den link den er gepostet. Aber ich habe gelesen, dass standardmäßig die bindingconfiguration festgelegt ist "" also ich sehe nicht, wie das würde helfen, mein Szenario.
  • Wo haben Sie <service> definiert, die in der server-config?
  • Wenn es nicht im web.config, ich denke, dass ich nie eines erstellt. Ich dachte immer, die configs wurden in den Kunden-und host-config-Dateien

InformationsquelleAutor Kelsey Abreu | 2013-11-17
Schreibe einen Kommentar