【发布时间】:2023-03-29 10:24:02
【问题描述】:
我正在尝试在本地 wifi 网络上托管一个带有 WPF 的网络服务器,并公开另一个设备(在我的例子中是 Android)可以在连接到同一个 wifi 网络时调用的 web 服务。我在防火墙上为我正在使用的端口创建了一个入站规则。仅当使用“以管理员身份运行”启动 Windows 应用程序时,Web 服务调用才会进行 有没有办法在没有管理员权限的情况下做同样的事情? 这是我的代码 -
public class SelfHost
{
WebServiceHost Host;
public void HostServer()
{
var hostIPadd = Util.GetLocalHostIP(); //This returns something like "http://192.168.1.2"
Values.SERVER_PORT_VALUE = "55000";
var uri = new Uri(hostIPadd + ":" + Values.SERVER_PORT_VALUE);
Host = new WebServiceHost(new Service{...}, uri);
//Start host
ServiceEndpoint ep = Host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
Host.Open();
}
}
public partial class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
StartHost();
}
private void StartHost()
{
var host = new SelfHost();
var thServer = new System.Threading.Thread(host.HostServer);
thServer.IsBackground = true;
thServer.Start();
}
}
我在防火墙中使用这些属性创建了入站规则
协议类型 - TCP
本地端口 - 特定端口 - 55000
个人资料 - 公开
操作 - “允许连接”
Programs - “所有满足指定条件的程序”
如果应用程序未在 Admin 中运行,我不太明白为什么防火墙会忽略此异常。 WebServiceHost 对象即使不在管理员模式下也运行良好,没有错误。 但是 webservice 调用永远不会到达服务器并且请求超时。
【问题讨论】:
标签: c# wpf self-hosting windows-firewall