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.

War es hilfreich?

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:

  1. 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)

  2. 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! .

  3. 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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top