我正在开发.Net 4.0 C#Windows窗体应用程序,它在某个预定义的端口上托管WCF服务(比方说12345)。我们有另一个iPad应用程序与此WCF服务对话 - 此连接被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服务的弹出窗口设为documentation states(参见底部):
WCF的自托管HTTP寻址未集成到Windows中 防火墙。必须在防火墙配置中添加例外 允许使用特定URL的入站连接。
答案 0 :(得分:1)
我不确定公开此对话框需要满足哪些条件,我假设尝试在vanilla Windows实例上打开侦听端口的应用程序应始终显示此对话框。为什么不尝试将应用程序添加到“授权应用程序”列表中,或者使用Windows防火墙COM互操作(NetFwTypeLib)手动打开端口?
答案 1 :(得分:1)
猜猜,但也许您需要为您的应用启用UAC管理员权限才能弹出?
查看以下博客文章:http://victorhurdugaci.com/using-uac-with-c-part-2/
答案 2 :(得分:0)
我认为您必须在应用程序中添加Embeded Application manifest file并设置require administrator,以便您可以在其中执行更改防火墙规则的bach文件。这是一个例子how can open ports using a bach file
希望它有所帮助