尝试添加服务引用时出错

时间:2012-04-10 07:50:19

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

我正在尝试在C#中创建一个Web服务的客户端(我想)是用Java编写的。这是我第一次尝试编写客户端,所以我按照MSDN上的说明操作,但是我遇到了Add 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

7 个答案:

答案 0 :(得分:3)

我遇到了类似的情况,我创建了一个WCF服务(Employee.svc),后来又将named更改为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项目。

答案 1 :(得分:2)

我尝试浏览http://geoportal.cuzk.cz/WCTService/WCTService.svc?wsdl。看起来这个服务没有公开元数据。

我在OpenGIS上做了一些谷歌搜索,我想你需要看一下这篇文章:

OpenGIS with .NET

您将无法添加服务引用并继续。看起来你需要制作一个具体的WSDL。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

  1. 自托管(控制台应用程序)
  2. IIS主机
  3. WAS Hosting
  4. 窗口服务托管。
  5. 如果您使用自托管,则需要在控制台应用程序中托管服务并运行服务(运行控制台应用程序),然后将服务引用添加到客户端应用程序,然后将交换元数据。如果服务未运行,那么在向客户端应用程序添加服务引用时,将找不到404错误。所有托管类型都将遵循相同的流程。首先运行该服务,然后添加服务引用。

答案 4 :(得分:0)

我知道这是一个旧线程并且已经解决了,但我刚刚完成了对这个问题的解决,并且此处提供的所有解决方案都不适用于我。想要分享我的决议,以防其他人遇到类似问题的其他人。

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

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

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:-1)

网络服务无法运行。

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

否则,您需要检查服务器是否运行等。由于我不知道如何运行Java Web服务,我无法帮助您。