Nur um aus der Box hilft Moment, haben Sie darüber nachgedacht, WCF mit MSMQ zu verwenden? Ich bin mir nicht sicher, ob ich Ihre Architektur vollständig verstehe, aber es klingt so, als ob der Client der API einen anderen Prozess in Gang setzen muss, der die API hostet. Möglicherweise liegt ein Zeitproblem zwischen dem Start des API-Hosts und dem Versuch des Clients vor, Anrufe zu tätigen. Microsoft hat .NET Remoting (sowie alle anderen bisherigen Kommunikationstechnologien wie ASMX-Webdienste) vor kurzem als veraltet deklariert und empfiehlt dringend, dass Entwickler auf die WCF-Plattform wechseln.
Wenn Sie WCF mit MSMQ verwenden, sollten Sie kein Problem mit dem Timing haben. Ihre Clientanwendung kann Nachrichten in einer dauerhaften Warteschlange ablegen, unabhängig davon, ob der API-Host ausgeführt wird oder nicht. Der API-Host kann jederzeit gestartet werden und alle Nachrichten, die in der Warteschlange warten, werden abgeholt und verarbeitet. Selbst wenn die Client-Anwendung den API-Host noch immer startet, ist das Timing-Problem kein Problem mehr, da Sie Warteschlangen zum Übertragen der Nachrichten anstelle von .NET Remoting verwenden. WCF bietet einen schönen, praktischen und einfach zu verwendenden Wrapper für MSMQ, so dass die Einstiegshürde relativ gering ist.
Die andere schöne Sache über WCF über .NET Remoting ist, dass Sie den API-Host leicht auf einen anderen physischen Server verschieben können, ohne die Client-App (s) ändern zu müssen. Sie können sogar zu einer anderen Warteschlangenplattform wechseln, wenn Sie dies wünschen (z. B. RabbitMQ auf AMQP), ohne die Client- oder API-Host-Apps zu ändern. WCF wickelt all diese Interaktionen für Sie ab und bietet eine wesentlich sauberere Entkopplung und zuverlässigere Kommunikation zwischen Ihrer Client-Anwendung und dem API-Host.
Wenn der Wechsel zu WCF keine Option ist, sollten Sie den Port mit .NET Remoting explizit festlegen können. Ich bin nicht sicher, wie Sie Ihre API-Host konfigurieren, aber die URL für jedes gegebenes remoted Objekt ist in der Regel in Form von:
tcp://<hostname>[:<port>]/<object>
Wenn Sie den Port hinzufügen, dann sollten Sie in der Lage sein, Abhijeet-Lösung zu verwenden Bestimmen Sie, ob der Port offen ist oder nicht. Sie werden nicht die losen Kopplungs- und zuverlässigen Kommunikationsvorteile von WCF erhalten, aber es wäre definitiv weniger Arbeit. ;)
Jon Skeet! Du musst die Antwort wissen! = [ – snicker