WCF wsdualhttpbinding客户端没有提升

时间:2014-02-14 15:05:50

标签: c# wcf callback wsdualhttpbinding

我创建了一个使用WCF wsdualhttpbinding回调功能的Windows服务(服务器)和WPF(客户端)。两个软件之间的所有东西都能正常工作,但我遇到的问题是客户端需要运行升级到管理员权限才能工作(这是可以理解的,因为它必须打开端口才能与服务器通信)

有没有办法让客户端在没有高程的情况下工作?或者可能创建一次性永久连接,以便客户端不需要一直升级?

我的想法和谷歌搜索条款已经用完了。

更新

我找到了解决方案。如果还有其他最好的做法,请纠正我!

我在运行netsh以打开(或关闭)并保留端口的客户端应用程序中添加了“启用”和“禁用”按钮。

启用

Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", @"http add urlacl url=http://+:" + PortNumber + @"/ user=DOMAIN\username");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();

禁用

Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", "http delete urlacl url=http://+:" + PortNumber + "/");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。如果还有其他最好的做法,请纠正我!

我在运行netsh以打开(或关闭)并保留端口的客户端应用程序中添加了“启用”和“禁用”按钮。

启用

Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", @"http add urlacl url=http://+:" + PortNumber + @"/ user=DOMAIN\username");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();

禁用

Process process = new Process();
process.StartInfo = new ProcessStartInfo("netsh", "http delete urlacl url=http://+:" + PortNumber + "/");
process.StartInfo.Verb = "runas";
process.Start();
process.WaitForExit();

答案 1 :(得分:0)

不幸的是,只有在以管理员权限运行时才能在Windows上打开端口。

http://msdn.microsoft.com/en-us/library/ms740548%28v=VS.85%29.aspx

  

要使用SOCK_RAW类型的套接字,需要管理权限。   运行使用原始套接字的Winsock应用程序的用户必须是a   否则,本地计算机上Administrators组的成员   原始套接字调用将失败,错误代码为WSAEACCES。在Windows上   Vista及更高版本,套接字强制访问原始套接字   创建。在早期版本的Windows中,对原始套接字的访问是   在其他套接字操作期间强制执行。

     

原始套接字提供了操纵底层的功能   传输,因此它们可以用于构成恶意目的   安全威胁。因此,只有Administrators组的成员   可以在Windows 2000及更高版本上创建SOCK_RAW类型的套接字。

编辑: 如果您可以作为管理员访问该计算机,则可以使用netsh http://technet.microsoft.com/en-us/library/cc725935(v=ws.10).aspx允许某些用户打开端口。

netsh http add urlacl url = http://+:80/Uri user = DOMAIN \ User listen = yes