在这篇文章之后,我构建了一个托管在 Windows 服务中的 WCF 服务:http: //msdn.microsoft.com/en-us/library/ms733069.aspx。服务中的代码所做的部分工作是加入多播组并侦听广播到该组的数据。然后它处理它。我发现当我使用 InstallUtil 手动安装服务时,它工作正常。要手动安装它,我执行以下操作:
- 在 Visual Studio 中构建 MyService 项目。
- 右键单击 Visual Studio 命令提示符并选择以管理员身份运行
- 导航到包含 MyService.exe 文件的文件夹
- 运行 InstallUtil 命令,如下所示: installutil.exe MyService.exe
该服务可以很好地安装在 Windows 中,然后我启动它。然后我运行我的 ASP.NET 应用程序,它是服务的客户端,它运行良好。该服务可以很好地接收和处理数据。
但是,我正在尝试使用Advanced Installer来构建一个 MSI 或 EXE,它将同时安装服务和 ASP.NET 应用程序,因此不必手动完成。我能够成功创建执行此操作的 Advanced Installer 项目,它实际上安装了 ASP.NET 应用程序和 Windows 服务都很好,它也启动了我的 Windows 服务。然而真正奇怪的是,当我运行应用程序时,我发现我的服务代码无法接收任何多播数据。它似乎阻止了那行代码,我从来没有得到任何数据。有谁知道为什么会发生这种情况?在进行高级安装程序安装时,我尝试使用 EXE 并使用“以管理员身份运行”。这是我的服务中的代码。
_groupAddress = IPAddress.Parse(_myIPAddress);
_listener = new UdpClient(_myPort);
_groupEP = new IPEndPoint(_groupAddress, _myPort);
_listener.JoinMulticastGroup(_groupAddress);
byte[] _bytes = _listener.Receive(ref _groupEP);
它似乎阻止了最后一行代码,并且它从不接收任何数据。这只发生在我使用 Advanced Installer 安装时。当我手动安装时,它工作正常。