使用 Windows 服务中托管的 WCF 服务时出现 HTTP 获取错误
Posted
技术标签:
【中文标题】使用 Windows 服务中托管的 WCF 服务时出现 HTTP 获取错误【英文标题】:Getting HTTP Get Error while Consuming WCF Service hosted in Windows Service 【发布时间】:2016-09-05 06:22:45 【问题描述】:在尝试使用 Windows 服务中托管的 WCF 服务时,出现 HTTP 获取错误,由于目标计算机主动拒绝它,无法建立连接。但是当我在控制台应用程序中托管相同的应用程序时,它工作正常。在 Windows 服务中托管应用程序时出现此问题。以下代码用于托管服务。
protected override void OnStart(string[] args)
try
Uri baseAddress = new Uri("http://localhost:8080/AuditService/");
host = new ServiceHost(typeof(AuditService), baseAddress);
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(typeof(IAuditService), new BasicHttpBinding(BasicHttpSecurityMode.None), baseAddress);
host.Open();
catch (Exception)
host.Abort();
【问题讨论】:
检查这是否有效:csharptutorial.in/30/… 【参考方案1】:你确定端口打开了吗?
您可以使用 telnet 客户端进行检查
telnet machine 8080
如果端口没有打开,那么你可以检查异常细节,看看是什么问题。
如果您的基于 HTTP 的服务是在非管理员帐户下启动的,那么您很可能需要使用以下命令注册它
netsh http add urlacl url=http://+:8080/AuditService user=mylocaluser
您可以在这里找到更多详细信息WCF ServiceHost access rights
【讨论】:
执行了以下命令:netsh http add urlacl url=http://+:8080/AuditService user="NETWORK SERVICE"。现在它的工作。但是查询简单,所以如果服务是使用管理员帐户安装的,则不需要此url注册?【参考方案2】:你用管理员打开命令提示符并写下这段文字:
netsh http add urlacl url=http://+:8080/AuditService user=Everyone
【讨论】:
以上是关于使用 Windows 服务中托管的 WCF 服务时出现 HTTP 获取错误的主要内容,如果未能解决你的问题,请参考以下文章
Windows 服务可以使用由另一个 Windows 服务托管的 WCF 服务吗?