use*_*348 24 c# asp.net wcf self-hosting wcf-binding
我创建了我的第一个自托管WCF服务.我在C#控制台应用程序中托管它,但它抛出一个错误:
System.ServiceModel.AddressAccessDeniedException:HTTP无法注册URL http:8080
当我以管理员身份运行Visual Studio 2013时,它运行良好,但如果不运行则不行.那么有什么方法可以自动完成它而不是将VS作为ADMIN启动?
到目前为止,我创建了一个HelloService类库,在其中我添加了一个WCF服务,该服务由一个接口IHelloService和HelloService.
IHelloService:
namespace HelloService
{
[ServiceContract]
public interface IHelloService
{
[OperationContract]
String GetMsg();
}
}
Run Code Online (Sandbox Code Playgroud)
HelloService:
namespace HelloService
{
public class HelloService : IHelloService
{
public String GetMsg()
{
return "Service Accessed";
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个C#控制台应用程序HelloServiceHost,它有一个app.config文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors >
<behavior name="MexBehaviour">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="HelloService.HelloService"
behaviorConfiguration="MexBehaviour" >
<endpoint
address="HelloService"
binding="basicHttpBinding"
contract="HelloService.IHelloService"></endpoint>
<endpoint
address="HelloService"
binding="netTcpBinding"
contract="HelloService.IHelloService"></endpoint>
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
<add baseAddress="net.tcp://localhost:8081/"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Run Code Online (Sandbox Code Playgroud)
和program.cs文件:
using HelloService;
using System.ServiceModel;
namespace HelloServiceHost
{
class Program
{
static void Main(string[] args)
{
using(ServiceHost sh = new ServiceHost(typeof(HelloService.HelloService)))
{
sh.Open();
Console.WriteLine("Host Started @"+ System.DateTime.UtcNow.ToShortDateString());
sh.Close();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我完全按照视频教程进行了操作但是为什么不工作呢?
我正在使用VS 2013,.net 4
小智 19
我在另一个项目上遇到了同样的问题.
问题是绑定到TCP端口需要管理权限.有几种方法可以解决这个问题.
保持管理命令提示符处于打开状 然后你可以直接运行控制台应用程序.
(正如你的建议)以管理员身份运行VS. 仅在调试应用程序时,这是绝对必要的.
创建一个应用程序最明显的文件,指定requestedExecutionLevel level ="requireAdministrator".请参阅如何强制我的.NET应用程序以管理员身份运行?更多细节.
小智 7
在您的情况下,需要根路径URL(http:// +:8080 /)权限:
netsh http add urlacl url=http://+:8080/ user=%USERDOMAIN%\%USERNAME%
Run Code Online (Sandbox Code Playgroud)
显示所有URL保留:
netsh http show urlacl | FIND "URL"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28557 次 |
| 最近记录: |