Я пытаюсь установить .Net удаленный вызов в приложение thirdparty. Вот пример кода, я был дан для связи (с фирменными названиями удалены):Удаленный вызов никогда не возвращается. Возможно, удаленный конфликт?
IDictionary props = new ListDictionary();
props["port"] = 0; // have the Remoting system pick a unique listening port (required for callbacks)
props["name"] = string.Empty; // have the Remoting system pick a unique name
BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider();
serverProv.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
_channel = new TcpChannel(props, new BinaryClientFormatterSinkProvider(), serverProv);
ChannelServices.RegisterChannel(_channel, true);
IThirdparty _thirdparty = (IThirdparty)Activator.GetObject(typeof(IThirdparty), "tcp://localhost:9090/Thirdparty.AppIntegration");
//Example API call
_thirdparty.Minimized = !_thirdparty.Minimized;
Когда этот код вызывается обычно, он висит на _thirdparty.Minimized
и выводит SocketException
в окне диагностики с сообщением:
No connection could be made because the target machine actively refused it
Звонок возвращается только в том случае, если я закрываю приложение Thirdparty.
Я проверил netstat -bano
и единственное приложение, работающее на порту 9090, является тем, к которому я пытаюсь подключиться.
Итак, я перевел вызов в первые несколько строк функции Main()
в мое приложение, и он работает нормально. Проблема в том, что это не то место, где это должно быть.
Мое приложение содержит множество других удаленных вызовов на другой сервер (не на порт 9090), а также службу WCF. Я предполагаю, что одна из этих вещей мешает.
Любые идеи о том, как я могу понять, почему этот удаленный вызов никогда не возвращается?
Update: я определил, что SocketException, вероятно, отвлекающим маневром, поскольку эти исключения возникают, когда он работает в 3-й тест участник приложения. Кроме того, похоже, что причина его висит в том, что она ждет Socket.Read(), которая никогда не получает никаких данных.