我写了一个简单的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();
}
}
}
我的层次结构
答案 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