2009-08-11 10 views
1

Ich habe einen Konsolen-App-Client, der mit einem WCF-Dienst kommuniziert, der von einer Konsolen-App auf einem anderen Server gehostet wird. Es verwendet Windows-Authentifizierung mit Sicherheitsmodus = NachrichtWCF: Client-Identitätswechsel

Es funktioniert gut, bis ich den Dienst ändern, um die Anmeldeinformationen des Clients zu imitieren. Die Änderungen, die ich tun, dass zu tun ist:
1. <serviceAuthorization impersonateCallerForAllOperations="true" /> In das Betriebsverhalten
2. Fügen Sie [OperationBehavior(Impersonation = ImpersonationOption.Required)] meiner Methode Unterschrift

ich dann meinen Dienst hosten und es läuft als normal, alles gut.

In meinem Klienten das einzige, was ich tun ist hinzuzufügen:

ChannelFactory<IService1> channel = new ChannelFactory<IService1>(binding, endPoint); 
channel.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 

ich dann mein Client ausführen und den Fehler:

Der Server ist nicht eine sinnvolle Antwort vorsah; Dies kann durch eine Vertragsinkongruenz, einen vorzeitigen Sitzungsabbruch oder einen internen Serverfehler verursacht werden.

Gibt es noch etwas, das ich vermisse, dass ich mit der Client-Konfiguration tun muss?

Antwort

0

Es kann sein, dass Ihre Servereinstellungen nicht mit dem Vertrag übereinstimmen.

Auf der Serverseite:

  • zu Windows-Authentifizierung IIS gesetzt?
  • Ist web.config auf Windows-Authentifizierung eingestellt?
  • Ist web.config gesetzt = true

Meine Vermutung zum Imitieren ist, dass Sie die letzte fehlen.

+0

@Tom Haben Sie Ihren Client neu kompiliert, nachdem Sie OperationBehaviour geändert haben? – JTew

0

Ich würde vermuten, dass der Aufruf der Methode wcf eine Ausnahme auf der Serverseite auslöst. Verfügen Sie über eine Infrastruktur, um serverseitige Ausnahmen oder Payloads zu erfassen? Wenn nicht, dann benutze so etwas wie die Protokollierung von wcf-Traces, um den Verkehr aufzuzeichnen.

Dies sollte Ihnen einen aussagekräftigeren Fehler geben.

Wenn Sie dies zu Ihrer Frage hinzufügen können wir hoffentlich erkennen, was das Problem verursacht.