使用 Visual Studio 2012 从 C# 中的 DLL 使用 WSDL WebService

Consuming a WSDL WebService from a DLL in C# using Visual Studio 2012

有没有办法让这成为可能?

我只用一种方法创建了一个简单的 WSDL Web 服务,我已经对其进行了测试并且可以正常工作。

现在我正在创建一个 DLL 并添加 Web 引用,但是当我尝试在我的代码中使用它时出现以下错误:

The "name of the webservice" does not exist in the current context

其他奇怪的事情,网络服务文件似乎没有加载,除了网络服务文件夹(公告服务)我没有看到其他任何东西

检查文件夹我只有 3 个文件:一个 .wsdl 文件、一个 reference.cs 文件和一个 .map 文件

我没有看到其他 .xsd.disco 文件。

我是不是做错了什么,或者将 Web 服务添加到 dll 与普通 ASP.NET 应用程序不同?

谢谢

作为对通过 Google 发现此问题的任何人的 FYI,就像我一样,此页面是很好的参考: https://www.sitepoint.com/net-web-services-5-steps/

您可以跳过第 1 部分,因为您不需要创建 Web 服务。 (他们构建了一个接受字符串并将其插入到 SQL 查询和 returns 数据表中的方法——一种非常常见的 Web 服务方法)

第 2 部分:创建代理 class

  1. ?WSDL 附加到 Web 服务 URL,即 http://localhost/suppliers.asmx?WSDL
  2. 打开记事本。将步骤 1 中的 URL 放在末尾:

    wsdl.exe /l:CS /n:WService /out:GetSuppliers.cs http://localhost/suppliers.asmx?WSDL

将文件另存为 makeWS.bat。如果你 运行 它,它会使用 wsdl 实用程序来创建代理 class (.cs) 文件。暂且搁置。

第 3 部分:构建我们的 DLL

  1. 将以下内容添加到批处理文件中的一行以使用 csc 实用程序来创建 DLL:

    csc /t:library /out:GetSuppliers.dll GetSuppliers.cs /reference:System.dll,System.Data.dll,System.Web.dll, System.Web.Services.dll,System.XML.dll /optimize

    现在保存并运行makeWS.bat.

第 4 部分:将我们的 DLL 合并到我们使用 Web 服务的项目中

  1. 添加对 Web 服务 URL 的服务引用。
  2. 将 DLL 添加到项目的 bin 文件夹中。将项目中的通用引用(不是服务引用)添加到该文件。
  3. 添加“使用 WService;” class 顶部的声明,您将在其中调用 Web 服务,因为那是 wsdl 实用程序添加了 /n:WService 的名称空间(如果您愿意,可以更改它,但必须在整个过程中完成) .

  4. 在您的 class 中添加这样一行: WService mySvc = new WService();

  5. 您应该能够在 Web 服务中调用 WebMethod: DataTable dt = mySvc.GetDataFromWebMethodX();

    其中 GetDataFromWebMethodX() 是您尝试使用的 WebMethod。

第 5 部分:一些有用的信息,可让您异步调用 Web 服务(代码可以继续进行而无需等待响应,稍后执行回调函数),您可以查看,但通常并不是真的需要。

根据问题评论,#4 似乎存在问题,它可以在创建 DLL 之前独立完成。如果您在使用服务引用引用 Web 服务 URL 时遇到问题,它必须是可发现的,并且它的名称不能与同一 environment/domain 中的其他名称冲突。正如问题的作者所发现的,它不能在其配置中定义与同一域中的另一个 site/web 服务冲突的端点(地址、端口)。似乎这个问题的答案更多是关于如何设置 Web 服务,而不是关于如何执行连接到它的过程,但我认为我会 post 考虑这两个方面,因为两者都很重要为了将 Web 服务消费到项目中并使用它。