WCF 服务 - 自托管服务不起作用

Posted

技术标签:

【中文标题】WCF 服务 - 自托管服务不起作用【英文标题】:WCF Service - Self Hosting Service does not work 【发布时间】:2013-03-10 00:13:40 【问题描述】:

我在 VS 2010 中创建了一个 WCF 服务应用程序。当我执行它时,我在以下本地 url 中获得了服务页面

我创建了另一个自托管控制台应用程序,如下所示。它抛出以下异常

HTTP 无法注册 URL。您的进程无权访问此命名空间(详情请参阅http://go.microsoft.com/fwlink/?LinkId=70353)。

好吧,我对 49609 端口号没有特别的兴趣。我刚刚从其他工作服务中复制了它。

现在,我拥有运行 WCF 服务的最低权限。我需要做哪些更改才能使以下代码成功?

注意:我没有机会获得这台机器的管理员权限。

注意:我可以使用任何可用的端口号。

namespace ConsoleApplication1

class Program

    static void Main(string[] args)
    
        string baseAddress = "http://" + Environment.MachineName + ":49609/Service";
        ServiceHost host1 = new ServiceHost(typeof(Service1), new Uri(baseAddress));
        host1.AddServiceEndpoint(typeof(ConsoleApplication1.IService1), new BasicHttpBinding(), baseAddress);
        host1.Open();

    
    static Binding GetBinding()
    
        BasicHttpBinding result = new BasicHttpBinding();
        return result;
    




服务

public class Service1 : IService1

    public int Add(int n1, int n2)
    
        return n1 + n2;
    


[ServiceContract]
public interface IService1

    [OperationContract]
    int Add(int n1, int n2);

【问题讨论】:

【参考方案1】:

要让控制台应用程序使用 HTTP.sys(这是 WCF 自托管方案使用的)打开传入(侦听)TCP 端口,它们需要具有管理权限,或者对于某些具有管理权限的帐户来保留供特定帐户(或所有帐户)使用的“命名空间”(即端口/路径对)。您提到您无法获得管理员权限,因此您需要在计算机上获得一些管理员才能授予您对将使用的某些命名空间的访问权限。

例如,在我的一台机器上,我从未以管理员身份运行 VS(或尽我所能,因为某些操作需要它),但要启动 WCF 服务,我选择了一条路径(在我的情况下,@987654321 @),然后我重用该路径作为我的服务的基地址。所以我必须以管理员身份运行下面的命令行:

netsh http add urlacl url=http://+:8000/Service user=MYDOMAIN\myusername

在您的情况下,您需要让管理员在框中为您运行类似的命令。

【讨论】:

【参考方案2】:

下面的帖子应该会有所帮助

http://weblogs.asp.net/joelvarty/archive/2009/01/06/for-wcf-services-hosted-in-non-iis-apps-add-permissions-for-a-user-to-change-the-iis-namespace-reservations.aspx

【讨论】:

以上是关于WCF 服务 - 自托管服务不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用在端点上设置了标识的 WCF:正确的 UPN 不起作用

为啥 WCF 休息服务(不是使用 WCF 休息服务模板创建的)不起作用?

WCF 服务在服务器上不起作用

更新服务参考在 WCF 中不起作用

从 jquery 调用 wcf rest 服务不起作用

WCF 服务证书和客户端端点身份 - 为啥它不起作用?