没有UAC / admin权限的主机WCF应用程序

时间:2011-04-25 02:08:57

标签: c# wcf

我编写了一个托管WCF服务的应用程序。 我尝试使用此配置运行应用程序。

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="MyApp.Service" behaviorConfiguration="ServiceBehavior">
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8000/service"/>
                    </baseAddresses>
                </host>
                <endpoint address="" binding="wsHttpBinding" contract="MyApp.IService"/>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="ServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="False"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

但它导致应用程序需要以管理员身份运行 是否可以在没有管理员权限的情况下运行此应用程序?(如果可能,仅更改配置。)此外,我还需要在Visual Studio中添加服务引用以编写客户端程序。如果可能,请保留应用程序可以在Visual Studio 2010中添加服务引用。

3 个答案:

答案 0 :(得分:7)

如果你想将它保留在HTTP绑定上,以便nonadmin可以运行它,你需要使用命令添加权限

netsh http add urlacl (see help for the rest of the params)

这将允许您指定的用户为该机器分割一大块URL空间。如果您不想这样做,则需要更改为不需要特殊权限才能侦听的其他绑定(例如netTcp)。

答案 1 :(得分:5)

基于对我的其他答案的评论,您将无法使用内置的HTTP绑定执行此操作 - 它们都基于HTTP.sys,这需要授予非管理员用户权限注册URL。如果您的部署方案允许,请考虑切换到netTcpBinding - 没有权限问题。否则,您使用内置绑定是SOL - 您需要构建一个不基于HTTP.sys的原始HTTP传输。

答案 2 :(得分:4)

此解决方案适用于我(使用HTTP绑定),在此URL上打开您的服务:

http://localhost:80/Temporary_Listen_Addresses/

必须承认我在google-ing之后在这个网站http://www.paraesthesia.com/archive/2010/06/11/developing-as-a-non-admin-testing-wcf-services.aspx/找到了一段时间......所以应该归功于那个人。