将 webHttpBinding 端点添加到现有的 netTcpBinding

Adding webHttpBinding endpoint to an existing netTcpBinding

我有一个可用的服务,它通过以下方式公开 netTcpBinding:

<service name="MetaData.Service.MetaDataServices" behaviorConfiguration="MetaDataServiceBehavior">
        <endpoint address="net.tcp://localhost:5200/MetaDataService" binding="netTcpBinding" bindingConfiguration="MetaDataBinding" contract="MetaData.ServiceContract.IMetaDataService"/>
      </service>

如何添加 http 端点?我尝试了以下方法:

<service name="MetaData.Service.MetaDataServices" behaviorConfiguration="MetaDataServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:5280/MetaDataService"/>
          </baseAddresses>
        </host>
        <endpoint address="net.tcp://localhost:5200/MetaDataService" binding="netTcpBinding" bindingConfiguration="MetaDataBinding" contract="MetaData.ServiceContract.IMetaDataService"/>
        <endpoint address="" binding="webHttpBinding"  contract="MetaData.ServiceContract.IMetaDataService"/>
      </service>

    </services>

但出现异常:

HTTP could not register URL http://+:5280/MetaDataService/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details). class name: RemoteProxy method name: Create

除非您运行以管理员身份使用自托管进程(我猜不是这种情况,而且您有充分的理由这样做),否则您将无法开始监听机器中的 HTTP 请求。您需要使用管理员命令提示符来授予对您的用户帐户的访问权限,方法是按照错误消息中 link 页面中的说明进行操作(link 已损坏,但它刚刚修复)。

如果您 运行ning Windows 7/8/10/Vista/Server 2008,您可以使用以下命令(从管理员命令提示符):

netsh http add urlacl url=http://+:5280/MetaDataService/ user=DOMAIN\user

其中 DOMAIN\user 是您在 运行 中使用的用户帐户。您可以在命令提示符中使用命令 whoami 找到它。

一旦你这样做了(每台机器只有一次),那么你应该可以 运行 使用非管理员帐户。