【问题标题】:404 Errors on WCF service hosted in Windows ServiceWindows 服务中托管的 WCF 服务出现 404 错误
【发布时间】:2015-08-10 17:12:35
【问题描述】:

我正在尝试创建一个托管在 Windows 服务中的 WCF 服务,并且在部署到服务器之前我正在本地进行测试。

创建并安装服务正常,我可以正常运行服务。

当我尝试通过 Visual Studio 或使用 WCFTestClient 添加引用时,出现以下错误。

错误:无法从 http://localhost/ServiceModelSamples/service 如果这是 Windows (R) 请访问您有权访问的通信基础服务 检查您是否已在指定位置启用元数据发布 地址。有关启用元数据发布的帮助,请参阅 MSDN 文档位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata交流 错误 URI:http://localhost/ServiceModelSamples/service 元数据 包含无法解析的引用:' http://localhost/ServiceModelSamples/service'。没有终点 听http://localhost/ServiceModelSamples/service 可以 接受消息。这通常是由于地址不正确或 SOAP 动作。有关更多详细信息,请参阅 InnerException(如果存在)。这 远程服务器返回错误:(404)未找到。 HTTP GET 错误
URI:http://localhost/ServiceModelSamples/service 有一个 下载“http://localhost/ServiceModelSamples/service”时出错。
请求失败,HTTP 状态为 404:未找到。

这是我的 app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
  <service behaviorConfiguration="CalculatorServiceBehavior" name="Microsoft.ServiceModel.Samples.CalculatorService">
    <endpoint address="" binding="basicHttpBinding" contract="Microsoft.ServiceModel.Samples.ICalculator" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />        
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/ServiceModelSamples/service" />
      </baseAddresses>
    </host>
  </service>
</services>
<bindings>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="CalculatorServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>        
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

您可以看到它对 msdn 上的教程稍作修改,用于在 Windows 服务中托管 WCF 服务。

我已尝试对此进行重新搜索,但没有发现太多或大部分问题似乎与 IIS 托管有关。

更新

按照venerik的建议添加端口号后,现在错误变成了如下。

错误:无法从http://localhost:8000/ServiceModelSamples/service 获取元数据如果这是您有权访问的 Windows (R) Communication Foundation 服务,请检查您是否已在指定地址启用元数据发布。有关启用元数据发布的帮助,请参阅位于 http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange 错误 URI:http://localhost:8000/ServiceModelSamples/service 元数据包含无法解析的引用的 MSDN 文档:“http://localhost:8000/ServiceModelSamples/service”。在http://localhost:8000/ServiceModelSamples/service 上没有可以接受消息的端点监听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。无法连接到远程服务器 由于目标机器主动拒绝,无法建立连接 127.0.0.1:8000HTTP GET 错误 URI:http://localhost:8000/ServiceModelSamples/service 下载“http://localhost:8000/ServiceModelSamples/service”时出错。无法连接到远程服务器 由于目标机器主动拒绝,无法建立连接 127.0.0.1:8000

【问题讨论】:

  • 添加引用时你的路径应该是http://localhost/ServiceModelSamples/service.svc
  • @MairajAhmad 刚试过,还是报错
  • 你的班级的名字是什么。我猜是CalculatorService,如果这是名字而不是地址应该是http://localhost/ServiceModelSamples/CalculatorService.svc
  • @MairajAhmad 类名是 CalculatorWindowsService,尝试将 /service 替换为 /CalculatorWindowsService 仍然会产生错误
  • 确定通过右键单击 svc 文件浏览服务,然后单击浏览并使用该路径。

标签: c# wcf windows-services


【解决方案1】:

您应该将您的客户端(如 WcfTestClient)连接到 http://localhost:8000/ServiceModelSamples/service。错误表明您正在尝试在没有端口的情况下连接到 http://localhost/ServiceModelSamples/service

我假设您在 localhost 上运行 IIS?这就是为什么错误还显示 The remote server returned an error: (404) Not Found. IIS 服务器正在侦听端口 80 并且找不到 ServiceModelSamples/service 并因此返回 404。

【讨论】:

  • 尝试添加端口,我仍然收到错误,尽管它不再是 404 错误。这也没有在 IIS 中运行,它是一个托管的 Windows 服务。
  • 我没有说服务在 IIS 中运行,但我假设您的计算机确实运行 IIS。客户端尝试获取“localhost/ServiceModelSamples/service”。由于 IIS 正在侦听 localhost(端口 80),因此 IIS 正在尝试为请求提供服务。无论如何,你能用新的错误更新问题吗?
  • 所以即使我托管在 Windows 服务中,我仍然需要运行 IIS?
  • 不,你没有。关键是:您的机器可能正在运行 IIS 以及您的 Windows 服务。 IIS 在端口 80 上侦听 HTTP 请求。您的 Windows 服务正在端口 8000 上侦听 HTTP 请求。像“localhost/ServiceModelSamples/service”这样的请求被定向到端口 80(HTTP 请求的默认端口),因此由 IIS 提供服务像“localhost:8000/ServiceModelsSamples/service”这样的请求被定向到端口 8000。您的 Windows 服务应该监听的端口(根据您的 app.config)。
【解决方案2】:

对我来说问题是服务名称没有在服务属性中设置,所以我设置了这个并确保安装程序服务名称匹配。 还将其设置为LocalSystem 帐户。不确定这是否有任何影响,但它被设置为NetworkService

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多