21

我正在开发 .Net 4.0 C# Windows Forms 应用程序,该应用程序在某个预定义端口(例如 12345)上托管 WCF 服务。我们有另一个与此 WCF 服务对话的 iPad 应用程序 - 此连接被 Windows 防火墙阻止。我的用户总是遇到麻烦,因为他们必须记住将此应用程序添加到例外列表等 - 这会导致挫败感。

要使 Windows 像下面的屏幕截图一样为我的应用程序显示弹出窗口,以使其更加用户友好,需要什么?

更新- 我知道我可以以编程方式更新 Windows 防火墙中的规则。但是,这需要管理员权限,这并不总是可行的。例如,我正在考虑将来某个时候 ClickOnce 部署 - 不确定它将如何与此一起使用。所以我仍然想知道我应该怎么做才能得到那个对话框。


解决方案: 感谢@alexw 下面的回答,我能够使用这个简单的代码获得对话框:

IPAddress ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint(ipAddress, 12345);

TcpListener t = new TcpListener(ipLocalEndPoint);
t.Start();
t.Stop();

以及更多 - 作为文档状态,不可能为 WCF 服务获取此弹出窗口(见底部):

WCF 的自承载 HTTP 寻址未集成到 Windows 防火墙中。必须将例外添加到防火墙配置以允许使用特定 URL 的入站连接。

在此处输入图像描述

4

3 回答 3

1

我不确定需要满足哪些条件才能公开此对话框,我假设尝试在普通 Windows 实例上打开侦听端口的应用程序应始终显示此对话框。为什么不尝试将您的应用程序添加到“授权应用程序”列表中,或者使用 Windows 防火墙 COM 互操作 (NetFwTypeLib) 手动打开端口?

http://blogs.msdn.com/b/securitytools/archive/2009/08/21/automating-windows-firewall-settings-with-c.aspx

于 2012-05-27T07:23:04.050 回答
1

只是猜测,但也许您需要为您的应用启用 UAC 管理员权限才能弹出?

查看这些博客文章,了解如何做到这一点:http: //victorhurdugaci.com/using-uac-with-c-part-2/

于 2012-05-31T10:59:07.437 回答
0

我认为您必须向您的应用程序添加一个嵌入式应用程序清单文件并设置要求管理员,以便您可以在其中执行一个更改防火墙规则的 bach 文件。这是一个如何使用 bach 文件打开端口的示例
希望它有帮助

于 2012-06-02T12:41:52.257 回答