Да, это возможно, и существуют различные методы, чтобы сделать это. Если они находятся в одной и той же сети, вы можете установить TCP-соединение между ними, как для TCPlistener, так и для TCP-клиента.
Однако, я бы порекомендовал вас посмотреть на WCF. С WCF вы сможете делать то, что вам нужно (и, вероятно, намного больше!), Но для чтения достаточно хорошо ознакомиться с библиотекой WCF.
Вы можете начать смотреть на следующее:
Efficient communication between two .Net applications
Communication between two winform application using WCF?
Communication between two WPF applications
Для стороны WCF вещей, вне линии того, что вы необходимо:
A. Откройте ServiceHost
в каждом из приложений (в своих конструкторах), используя те же URI, что и ссылка. Это откроет NetNamedPipeBinding
, с которым вы можете общаться между двумя приложениями.
Пример:
public static ServiceHost OpenServiceHost<T, U>(T instance, string address)
{
ServiceHost host = new ServiceHost(instance, new Uri[] { new Uri(address) });
ServiceBehaviorAttribute behaviour = host.Description.Behaviors.Find<ServiceBehaviorAttribute>();
behaviour.InstanceContextMode = InstanceContextMode.Single;
host.AddServiceEndpoint(typeof(U), new NetNamedPipeBinding(), serviceEnd);
host.Open();
return host;
}
В. Создание слушателя на соответствующем канале. Это можно сделать в и приложениях, чтобы обеспечить двухстороннюю связь.
Пример:
/// <summary>
/// Method to create a listner on the subscribed channel.
/// </summary>
/// <typeparam name="T">The type of data to be passed.</typeparam>
/// <param name="address">The base address to use for the WCF connection.
/// An example being 'net.pipe://localhost' which will be appended by a service
/// end keyword 'net.pipe://localhost/ServiceEnd'.</param>
public static T AddListnerToServiceHost<T>(string address)
{
ChannelFactory<T> pipeFactory =
new ChannelFactory<T>(new NetNamedPipeBinding(),
new EndpointAddress(String.Format("{0}/{1}",
address,
serviceEnd)));
T pipeProxy = pipeFactory.CreateChannel();
return pipeProxy;
}
С. Создание и интерфейс, который используется в обоих приложениях и унаследовал в соответствующих классах. Некоторые IMyInterface
.
Вы можете настроить библиотеку, которая может использоваться в двух приложениях, чтобы обеспечить базу кодов согласования. Такая библиотека будет содержать два метода выше [более] и будет использоваться в двух приложениях, как:
// Setup the WCF pipeline.
public static IMyInterface pipeProxy { get; protected set;}
ServiceHost host = UserCostServiceLibrary.Wcf
.OpenServiceHost<UserCostTsqlPipe, IMyInterface>(
myClassInheritingFromIMyInterface, "net.pipe://localhost/YourAppName");
pipeProxy = UserCostServiceLibrary.Wcf.AddListnerToServiceHost<IMyInterface>("net.pipe://localhost/YourOtherAppName");
Где pipeProxy
некоторый класс наследования от IMyInterface
. Это позволяет обоим приложениям знать, что передается (если что угодно - в вашем случае это будет пустота, просто «подсказка», позволяющая приложениям знать что-то заранее заданное через интерфейс). Обратите внимание, что у меня есть не показать, как вызовы выполняются для каждого приложения, и вы можете это решить самостоятельно ...
В приведенном выше виде есть некоторые пробелы, которые вам нужно заполнить, но используя все, что я предоставил, должно облегчить вам выполнение необходимых действий.
Надеюсь, это поможет.
_Is это возможно? _ Вы пробовали что-нибудь? –
Да, это возможно. –
Попробуйте что-нибудь от себя, а затем спросите в SO. – Luv