使用 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 服务(托管 WCF 服务)在启动时立即停止

Windows 服务可以使用由另一个 Windows 服务托管的 WCF 服务吗?

托管在 Windows 服务中的 WCF 服务在停止时挂起

当 WCF 应用程序在 Windows 7 上作为 Windows 服务托管时,找不到证书

如何在虚拟机中使用托管在 Windows 服务中的 WCF

使用移动设备访问托管在 Windows 服务中的 WCF 服务