2

我有一个在 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);
}
4

2 回答 2

6

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

例如,在我的一台机器上,我从来没有以管理员身份运行我的 VS(或者尽我所能,因为某些操作需要它),但是为了启动 WCF 服务,我选择了一个路径(在我的情况下,http://<my-machine-name>:8000/Service),我重用该路径作为我的服务的基地址。所以我必须以管理员身份运行下面的命令行:

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

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

于 2013-03-20T19:31:20.830 回答