从多个客户端使用 COM DLL
Consume COM DLL from multiple clients
我正在尝试构建一个将由多个客户端使用的 COM DLL。
为此,我有 2 个客户。
- 控制台应用程序(订阅者)
- WPF 应用程序(发布者)
WPF 应用程序将调用 COM DLL 的 Publish 方法,该方法将引发事件,订阅此事件的控制台应用程序将响应。
事件是静态的。
COM DLL
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComListen
{
[DispId(2)]
string Publish();
[DispId(1)]
string Version();
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IListenerEvents
{
void Ack();
}
public delegate void AckDelegate();
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IListenerEvents))]
public class Listen : IComListen
{
public static event AckDelegate Ack;
public string Publish()
{
Ack();
return "This message should be published";
}
public string Version()
{
return "0.050";
}
}
WPF 应用程序:
private void Button_Click(object sender, RoutedEventArgs e)
{
var listener = new Listen();
listener.Publish();
}
控制台应用程序:
private static void Main(string[] args)
{
Listen.Ack += Listen_Ack;
while (true)
{
}
}
private static void Listen_Ack()
{
throw new NotImplementedException();
}
目前的状态是COM DLL中Publish()方法里面的Ack()为null...
您正在尝试处理由另一个应用程序触发的事件。
我认为您必须使用以下协议之一:
AMQP
STOMP
MQTT
AMQP 1.0
HTTP
见Handle events from another application
和https://www.codeproject.com/Articles/5830/Using-MSMQ-from-C
我的建议是:
https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html
RabbitMQ 可以并且在企业应用程序中用于处理微服务之间的事件。替代方案是 Apache Kafka。
我正在尝试构建一个将由多个客户端使用的 COM DLL。
为此,我有 2 个客户。
- 控制台应用程序(订阅者)
- WPF 应用程序(发布者)
WPF 应用程序将调用 COM DLL 的 Publish 方法,该方法将引发事件,订阅此事件的控制台应用程序将响应。
事件是静态的。
COM DLL
[Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IComListen
{
[DispId(2)]
string Publish();
[DispId(1)]
string Version();
}
[Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IListenerEvents
{
void Ack();
}
public delegate void AckDelegate();
[Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IListenerEvents))]
public class Listen : IComListen
{
public static event AckDelegate Ack;
public string Publish()
{
Ack();
return "This message should be published";
}
public string Version()
{
return "0.050";
}
}
WPF 应用程序:
private void Button_Click(object sender, RoutedEventArgs e)
{
var listener = new Listen();
listener.Publish();
}
控制台应用程序:
private static void Main(string[] args)
{
Listen.Ack += Listen_Ack;
while (true)
{
}
}
private static void Listen_Ack()
{
throw new NotImplementedException();
}
目前的状态是COM DLL中Publish()方法里面的Ack()为null...
您正在尝试处理由另一个应用程序触发的事件。 我认为您必须使用以下协议之一:
AMQP
STOMP
MQTT
AMQP 1.0
HTTP
见Handle events from another application
和https://www.codeproject.com/Articles/5830/Using-MSMQ-from-C
我的建议是: https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html
RabbitMQ 可以并且在企业应用程序中用于处理微服务之间的事件。替代方案是 Apache Kafka。