Mam dość prostą aplikację klient-serwer, której używam do oddzielenia dwóch komponentów, które nie mogą żyć razem w tym samym procesie. Podczas ich tworzenia (serwerem jest exe, klient jest biblioteką), wszystkie moje testy jednostkowe są szczęśliwe jako świnie w odchodach. Kiedy przejść do ponownego korzystania z biblioteki gdzie indziej, otrzymuję następujący wyjątek:Dlaczego IpcChannel mówi mi "Nie można otworzyć tokena bezpieczeństwa anonimowego poziomu?"
System.Runtime.Remoting.RemotingException: An error occurred while processing the request on the server: System.Security.SecurityException: Cannot open an anonymous level security token.
at System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess, Boolean threadOnly)
at System.Security.Principal.WindowsIdentity.GetCurrent()
at System.Runtime.Remoting.Channels.Ipc.IpcServerTransportSink.ServiceRequest(Object state)
The Zone of the assembly that failed was:
MyComputer.
I skonfigurowaniu usług zdalnych po obu stronach w kodzie, zamiast plikach konfiguracyjnych dla uproszczenia na tym etapie. Są one skutecznie identyczne:
BinaryClientFormatterSinkProvider client = new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider server = new BinaryServerFormatterSinkProvider();
server.TypeFilterLevel = TypeFilterLevel.Full;
Hashtable config = new Hashtable();
config["name"] = "SomeName";
config["portName"] = "SomePortName";
config["typeFilterLevel"] = "Full";
config["impersonate"] = "true";
config["tokenImpersonationLevel"] = "Impersonation";
config["useDefaultCredentials"] = "True";
config["secure"] = "True";
Channel = new IpcChannel(config, client, server);
Więc pytanie brzmi: Dlaczego ramy remoting chciałby utworzyć anonimową żeton podczas personifikacji jest włączona? Całkowicie wyczerpałem miejsca, szukając odpowiedzi na ten temat.