2013-03-19 74 views
2

我在WPF应用程序中为某些任务使用自托管服务。服务主机在运行时启动,其基址为http://localhost:Whatever-port-is-free-at-runtime。当用户具有管理权限时,这可以正常工作,但应用程序由受限用户运行时会出现问题。WCF ServiceHost受限用户netsh/httpcfg

我在网络上发现了一些建议,建议使用netsh/httpcfg保留网址,该网址适用于管理员用户,但对于受限用户不适用,因为他们可能没有使用这些工具保留网址的权限。由于直到运行时才知道端口号,因此url保留命令在逻辑上只能在运行时运行,这意味着进程将由受限用户启动,而不具有执行命令的权限。我在想这个吗?

我想知道的是,如果有适当的解决方法?另外,我想知道受限用户是否可以打开本地托管的WCF服务,因为如果受限用户无法做到这一点,解决上述问题将毫无意义。

This question perfectly describes my first issue of URL reservation

+1

此服务是否被任何客户端使用?如果是,那么客户端如何随着地址的变化动态生成地址而使用该服务。另外为什么你没有WCF服务的固定端口? – Rajesh 2013-03-20 17:02:23

+0

是的,它被其他客户使用。动态生成的localhost:xxxx url在运行时会让客户端知道,所以这不是一个问题,因为当以admin身份运行时,此设置实际上工作。我不能拥有一个固定端口,因为我无法确定最终用户计算机上的硬编码端口号是否空闲,即使这是我仍然遇到的问题,因为我仍然需要保留命名空间。 – Bablo 2013-03-20 17:51:44

回答

1

在WCF中,HTTP和HTTPS绑定使用的HTTP.sys的掩护下,以保留所需的URL为特定的WCF服务,这是相同的路径IIS本身遵循一边做绑定的网站它管理。这就解释了执行HTTP/HTTPS绑定的进程需要在提升模式下运行的原因。

话虽这么说,我会解决你的问题,两种不同的方式:

选项1:使用不同种类的结合。例如,NetTcpBindingNetNamedPipesBinding,例如,不要一般需要管理权限:这是迄今为止最简单的方法。

选项2:在安装时设置必需的命名空间预留。这样您可能会要求您的用户在提升模式下执行安装,并稍后允许受限制的帐户运行它。在执行初始安装/预留时,您还可以找到可用的端口(也可以将其保存在配置文件中供以后重复使用)。