无法托管我的WCF

时间:2014-09-04 16:57:51

标签: c# wcf

我写了一个简单的WCF代码。并希望主持它。但是当我跑步时,它显示了一个异常

HTTP could not register URL http://+:8080/. Your process does not have access rights to this namespace 我有一个类库项目,我在其中编写了WCF代码。然后我添加了App.config文件并写了一些代码

App.config代码:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <system.serviceModel>
    <services>
      <service name="DEMO1.HelloService" behaviorConfiguration="mexBehavior">
        <endpoint address="HelloService" binding="basicHttpBinding" contract="DEMO1.IHelloService"></endpoint>
        <endpoint address="HelloService" binding="netTcpBinding" contract="DEMO1.IHelloService"></endpoint>
        <endpoint address="Mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080"/>
            <add baseAddress="net.tcp://localhost:8090"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

这是我的界面

[ServiceContract]
    public interface IHelloService
    {
        [OperationContract]
        string GetMessage(string name);
    }

我实现了这个

 public class HelloService : IHelloService
    {
        public string GetMessage(string name)
        {
            return "Name : " + name;
        }
    }

然后我为该解决方案添加了另一个控制台项目

class Program
    {
        static void Main()
        {
            using(ServiceHost host=new ServiceHost(typeof(DEMO1.HelloService)))
            {
                try
                {
                    host.Open();
                    Console.WriteLine("Started");
                }catch(Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.ReadLine();
            }
        }
    }

我的层次结构 enter image description here

2 个答案:

答案 0 :(得分:1)

当您可以手动更改baseaddress时,会出现此问题。因此,wcf服务无法找到服务所在的服务位置,因此如果您可以更改服务baseaddress端口,则只能更改端口号,并且不应更改所有地址。如果您更改了所有地址,则地址无法找到服务地点,服务一直在提供错误。

答案 1 :(得分:0)

通过您尝试使用的HTTP.SYS(包括WCF)requires permission to the namespace托管的任何服务(http://localhost:8080,在您的情况下)。

以管理员身份运行,或add an urlacl允许您的进程访问命名空间。

在管理员命令提示符中:

netsh http add urlacl url=http://+:8080/ user=BUILTIN\Users