Wählen Sie einen spezifischen Kanal auf active.getObject aus
-
26-10-2019 - |
Frage
Angenommen, Sie haben zwei TCPChannels in .NET Remoting registriert.
Dann versuche ich, den Proxy mithilfe zu bekommen Activator.GetObject
mit einer URL tcp://...
Ist es möglich zu wählen, welchen Kanal zu verwenden ist?
Danke im Voraus.
Lösung
Hast du das gelöst?
Ich hatte letzte Woche genau das gleiche Problem. (Ein leichter unveröffentlichter Nebeneffekt von Nunit ist, dass er den Standard "TCP" -Kanal auferlegt Server -Software ... und unsere Waschbecken haben nicht gefeuert, als ich ein Serverobjekt instanziierte.
Es gibt 3 Lösungen:
Wenn Sie möchten, dass einer den anderen dauerhaft überschreibt, geben Sie einfach die "Priorität" -Spertum in den Idictionary -Konstruktor auf Ihrem TCPClientChannel weiter. Der Standard, wenn nicht festgelegt ist, ist 1. Wenn Sie möchten, dass er überschreibt, sagen Sie die Standardregistrierung "TCP" -Kanal. Setzen Sie dann höher als 1. Dann können Sie so viele davon haben, wie Sie möchten)
Benennen Sie Ihre Kanäle bei der Registrierung und schreiben Sie dann einen schönen idisposablen Wrapper, um ein "Verwenden" Konstrukt aufzurufen, das ChannelServices.unregister (...) auf den Kanälen aufruft, die Sie beim Aufrufen von Activator.getObject (... ). Wenn Ihre "Blocksende" (dh Anrufaufrufe () ()) einfach die von Ihnen nicht registrierten Kanäle neu laden ... stellen Sie sicher Engpass! .
Beenden Sie vorübergehend die Priorität Ihres Zielkanals mit einer tiefen Reflexion (dh mit privaten FieldInfos ... nämlich die private int _channelpriority (glaube ich) ... Verwenden Sie Reflektor, um zu überprüfen), bevor Sie Active.GetObject anrufen. Dies ist auch offen für Threading-Probleme und auch nicht für die Versionssicherung von Framework (daher habe ich diesen vermieden)