【问题标题】:Error when trying to add a Service Reference尝试添加服务引用时出错
【发布时间】:2012-04-22 12:35:53
【问题描述】:

我正在尝试用 C# 为 Web 服务创建一个客户端,该 Web 服务(我想)是用 Java 编写的。这是我第一次尝试编写客户端,所以我按照 MSDN 上的说明进行操作,但我遇到了添加引用的问题。当我打开 Add Service Reference 对话框并添加 URL 时,出现错误:

There was an error downloading 'http://geoportal.cuzk.cz/WCTService/WCTService.svc'.
The request failed with HTTP status 404: Not Found.
Metadata contains a reference that cannot be resolved: 'http://geoportal.cuzk.cz/WCTService/WCTService.svc'.
There was no endpoint listening at http://geoportal.cuzk.cz/WCTService/WCTService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
The remote server returned an error: (404) Not Found.
If the service is defined in the current solution, try building the solution and adding the service reference again.

我的下一步应该是什么?我不知道我该怎么办! (这是来自捷克共和国的坐标转换服务。)

更多信息:
物业服务 (GetCapabilities) http://geoportal.cuzk.cz/WCTService/WCTService.svc/get?

本地化服务: http://geoportal.cuzk.cz/WCTService/WCTService.svc/get?request=GetCapabilities&service=WCTS

【问题讨论】:

  • 这给了我错误...Endpoint not found.您确定服务器上的服务状态正确吗?该服务的配置文件中是否定义了任何端点?

标签: c# web-services webclient service-reference


【解决方案1】:

我遇到了类似的情况,我创建了一个 WCF 服务 (Employee.svc),后来将名称更改为 EmployeeService.svc。 WCF 项目编译得很好,但是当我尝试通过 UI 客户端添加服务引用时,出现以下错误:

Metadata contains a reference that cannot be resolved: 'http://localhost:2278/EmployeeService.svc?wsdl'.
The document format is not recognized (the content type is 'text/html; charset=UTF-8').
Metadata contains a reference that cannot be resolved: 'http://localhost:2278/EmployeeService.svc'.
There was no endpoint listening at 'http://localhost:2278/EmployeeService.svc' that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
The remote server returned an error: (404) Not Found.
If the service is defined in the current solution, try building the solution and adding the service reference again.

我通过在各处替换正确的服务类名称来解决它。就我而言,它应该是 EmployeeService 而不是雇员。遗漏的地方在svc文件的标记代码中:

<%@ ServiceHost Language="C#" Debug="true" Service="WCFServiceHost.**Employee**" CodeBehind="EmployeeService.svc.cs" %>

改成

<%@ ServiceHost Language="C#" Debug="true" Service="WCFServiceHost.**EmployeeService**" CodeBehind="EmployeeService.svc.cs" %>

它又开始工作了!!!更改服务名称后不要忘记构建您的 WCF 项目。

【讨论】:

  • “不要忘记构建你的 WCF 项目”谢谢。那条线救了我:))))
【解决方案2】:

我尝试浏览到http://geoportal.cuzk.cz/WCTService/WCTService.svc?wsdl。该服务似乎没有公开元数据。

我在 OpenGIS 上做了一些谷歌搜索,我认为您需要看看这篇文章:

OpenGIS with .NET

您不能只添加一个服务引用就走。看起来您需要制作一个具体的 WSDL。

您可以使用/自定义一个客户端库来协助集成。看看 Stack Overflow 问题 Using MySQL GeoSpatial data types in .NET

【讨论】:

    【解决方案3】:

    在您尝试添加服务引用之前,服务是否已确定启动并运行?如果它公开元数据,它是否配置了服务行为或等效行为?您是否正确配置了防火墙?

    【讨论】:

      【解决方案4】:

      向客户端应用程序添加服务引用时,元数据无法从服务访问到客户端应用程序。因此远程服务器返回错误:(404)未找到。实际上我们可以如下托管 WCF 服务:

      1. 自托管(控制台应用程序)
      2. IIS 托管
      3. WAS 托管
      4. 窗口服务托管。

      如果您使用自托管,则需要在控制台应用程序中托管服务并运行服务(运行控制台应用程序),然后将服务引用添加到客户端应用程序,然后元数据将被交换。如果服务没有运行,那么在向客户端应用程序添加服务引用时,将会出现 404 not found 错误。所有托管类型都将遵循相同的过程。首先运行服务,然后添加服务引用。

      【讨论】:

        【解决方案5】:

        我知道这是一个旧线程并且已经解决,但我刚刚完成了对这个确切问题的故障排除,并且此处提供的解决方案均不适合我。想分享我的解决方案,以防其他人遇到类似问题。

        我的整个问题源于一个错误的 Refactor->Rename 操作。我最近为我的开发团队购买了 Resharper,而 Resharper 不喜欢我们的服务实现名称。我们将其命名为“WCFAccess”,而 Resharper 想要命名为“WcfAccess”。我刚刚发布了一个更新,将该版本安全地隔离在 git 中它自己的发布分支中,并认为这是在开发分支上执行重命名并关闭 Resharper 关于命名的好时机。我使用 Refactor->Rename 来更改文件的名称以匹配我们在 Resharper 配置中定义的命名约定。重命名操作完成,解决方案编译并运行,时间过去了,WCF 重命名被遗忘了。

        快进几周,是时候将 Web 服务部署到测试环境以进行回归测试了。解决方案编译成功,发布成功,然后给了我 OP 发布的 EXACT 错误。我最终发现,几周前的重命名操作仅将源代码引用更新为旧名称,并没有重命名标记。当我导航到服务发布到的 Web 服务器并双击 .svc 文件时,它在 Visual Studio 中打开了标记,我注意到 CodeBehind="ServiceNameHere.svc.vb" 的字符大小写不一致使用新的命名约定。更新标记和 web.config 文件以引用正确的字符大小写解决了我的问题。

        我希望这对某人有所帮助。排除故障非常令人沮丧

        (请不要因为我使用 VB.Net 而讨厌我,我继承了这个应用程序):-)

        【讨论】:

          【解决方案6】:

          我今天早些时候也遇到了同样的问题。 Web 服务在本地主机上运行良好,但由于某种原因,尝试在另一个项目中添加服务引用时出现 400。

          我的错误是由在服务的枚举上设置[DataMember] 注释而不是[EnumMember] 注释引起的。更改它解决了我的问题。

          【讨论】:

            【解决方案7】:

            网络服务没有运行。

            如果您无权访问运行此服务的服务器,则会被阻止。

            否则,你需要检查服务器是否运行等。由于我不知道Java webservice是如何运行的,我无法进一步帮助你。

            【讨论】:

              猜你喜欢
              • 2010-12-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多