我有这个巨大的问题,我无法完成它。
我创建了一个ActiveX dll组件。它在Console Application中使用,它创建一个实例并在托盘中运行。这是代码:
class Program
{
public static string MSG;
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static NotifyIcon tray = new NotifyIcon();
static void Main(string[] args)
{
Console.Title = "ActiveXConsole";
Program program = new Program();
IntPtr hWnd = FindWindow(null, "ActiveXConsole");
if (hWnd != IntPtr.Zero)
{
ShowWindow(hWnd, 0);
}
tray.Icon = new Icon("App.ico");
tray.Visible = true;
tray.Text = "ActiveXConsole";
tray.ShowBalloonTip(3000, "ActiveXConsole", "ActiveXConsole working...", ToolTipIcon.None);
program.ActivateActiveX();
}
public void ActivateActiveX()
{
ActiveXdll.Class1 activex = new ActiveXdll.Class1();
activex.OnMessage += new EventHandler<NewMessageArgs>(ProcessMessage);
//this activates the StartListen method that is listening for a UDP message.
//the event is created in it
activex.StartListen();
}
public void ProcessMessage(object sender, NewMessageArgs args)
{
IntPtr hWnd = FindWindow(null, "ActiveXConsole");
MSG = args.Message;
tray.ShowBalloonTip(3000, "ActiveXConsole", "UDP Message has arrived", ToolTipIcon.None);
}
}
}
DLL实际上在某个端口上接收UDP字符串并将其“转换”为事件,该事件在控制台应用程序中处理,如上面的代码所示。
到目前为止效果很好,但我已经堆积了。现在我需要创建侦听这些事件的Web应用程序。我不能直接在Web应用程序中使用DLL的原因是,如果激活它的选项卡被多次打开(因此将多次激活它),UDP套接字侦听器将产生一些冲突因为不超过一个套接字可以同时在同一个端口上打开。
我知道有一种方法可以做到这一点,因为我已经在其他软件中看到过,但是如何?最好的方法是什么?基本上,控制台应用程序创建ActiveX DLL的实例,并且在那里引发的事件由Web应用程序监听,该应用程序在触发时执行某些操作。
我们正在使用.NET 2.0框架,公司政策。不要问我为什么我们不会迁移到更新的东西。
答案 0 :(得分:0)
尝试使用您的控制台应用程序并在其中托管WCF服务。然后,Web应用程序可以轮询服务以询问是否存在事件。