我在WPF应用程序中为某些任务使用自托管服务。服务主机在运行时启动,其基本地址为http://localhost:Whatever-port-is-free-at-runtime
。当用户具有管理权限时,这一功能很好,但当应用程序由受限制的用户运行时会出现问题。
我在网上发现了一些建议,建议使用netsh/httpcfg
保留url,这对管理员用户来说很好,但对受限用户来说却失败了,因为他们可能无权使用这些工具来保留url。由于端口号直到运行时才知道,因此url保留命令在逻辑上只能在运行时运行,这意味着进程将由没有执行该命令的权限的受限用户启动。我这样想对吗?
我想知道的是周围是否有合适的工作?此外,我想知道受限用户是否可以打开本地托管的WCF服务,因为如果受限用户不能做到这一点,解决上述问题将毫无意义。
这个问题完美地描述了我的第一期URL预订
在WCF中,HTTP和HTTPS绑定使用HTTP.sys为特定WCF服务保留所需的URL,这与IIS为其管理的网站进行绑定时遵循的路径相同。这解释了为什么执行HTTP/HTTPS绑定的进程需要在提升模式下运行。
话虽如此,我会用两种不同的方式来解决你的问题:
选项1:使用不同类型的绑定。例如,NetTcpBinding和NetNamedPipesBinding通常不需要管理权限:这是迄今为止最简单的方法。
选项2:在安装时设置所需的命名空间保留通过这种方式,您可以要求用户在提升模式下执行安装,然后允许受限制的帐户运行。在执行初始安装/保留时,您还可以找到一个可用的端口(并可能将其保存在配置文件中以备日后重用(。