使用 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
- 将 ?WSDL 附加到 Web 服务 URL,即
http://localhost/suppliers.asmx?WSDL
打开记事本。将步骤 1 中的 URL 放在末尾:
wsdl.exe /l:CS /n:WService /out:GetSuppliers.cs http://localhost/suppliers.asmx?WSDL
将文件另存为 makeWS.bat。如果你 运行 它,它会使用 wsdl 实用程序来创建代理 class (.cs) 文件。暂且搁置。
第 3 部分:构建我们的 DLL
将以下内容添加到批处理文件中的一行以使用 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 服务的项目中
- 添加对 Web 服务 URL 的服务引用。
- 将 DLL 添加到项目的 bin 文件夹中。将项目中的通用引用(不是服务引用)添加到该文件。
添加“使用 WService;” class 顶部的声明,您将在其中调用 Web 服务,因为那是 wsdl 实用程序添加了 /n:WService
的名称空间(如果您愿意,可以更改它,但必须在整个过程中完成) .
在您的 class 中添加这样一行:
WService mySvc = new WService();
您应该能够在 Web 服务中调用 WebMethod:
DataTable dt = mySvc.GetDataFromWebMethodX();
其中 GetDataFromWebMethodX()
是您尝试使用的 WebMethod。
第 5 部分:一些有用的信息,可让您异步调用 Web 服务(代码可以继续进行而无需等待响应,稍后执行回调函数),您可以查看,但通常并不是真的需要。
根据问题评论,#4 似乎存在问题,它可以在创建 DLL 之前独立完成。如果您在使用服务引用引用 Web 服务 URL 时遇到问题,它必须是可发现的,并且它的名称不能与同一 environment/domain 中的其他名称冲突。正如问题的作者所发现的,它不能在其配置中定义与同一域中的另一个 site/web 服务冲突的端点(地址、端口)。似乎这个问题的答案更多是关于如何设置 Web 服务,而不是关于如何执行连接到它的过程,但我认为我会 post 考虑这两个方面,因为两者都很重要为了将 Web 服务消费到项目中并使用它。
有没有办法让这成为可能?
我只用一种方法创建了一个简单的 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
- 将 ?WSDL 附加到 Web 服务 URL,即 http://localhost/suppliers.asmx?WSDL
打开记事本。将步骤 1 中的 URL 放在末尾:
wsdl.exe /l:CS /n:WService /out:GetSuppliers.cs http://localhost/suppliers.asmx?WSDL
将文件另存为 makeWS.bat。如果你 运行 它,它会使用 wsdl 实用程序来创建代理 class (.cs) 文件。暂且搁置。
第 3 部分:构建我们的 DLL
将以下内容添加到批处理文件中的一行以使用 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 服务的项目中
- 添加对 Web 服务 URL 的服务引用。
- 将 DLL 添加到项目的 bin 文件夹中。将项目中的通用引用(不是服务引用)添加到该文件。
添加“使用 WService;” class 顶部的声明,您将在其中调用 Web 服务,因为那是 wsdl 实用程序添加了
/n:WService
的名称空间(如果您愿意,可以更改它,但必须在整个过程中完成) .在您的 class 中添加这样一行:
WService mySvc = new WService();
您应该能够在 Web 服务中调用 WebMethod:
DataTable dt = mySvc.GetDataFromWebMethodX();
其中
GetDataFromWebMethodX()
是您尝试使用的 WebMethod。
第 5 部分:一些有用的信息,可让您异步调用 Web 服务(代码可以继续进行而无需等待响应,稍后执行回调函数),您可以查看,但通常并不是真的需要。
根据问题评论,#4 似乎存在问题,它可以在创建 DLL 之前独立完成。如果您在使用服务引用引用 Web 服务 URL 时遇到问题,它必须是可发现的,并且它的名称不能与同一 environment/domain 中的其他名称冲突。正如问题的作者所发现的,它不能在其配置中定义与同一域中的另一个 site/web 服务冲突的端点(地址、端口)。似乎这个问题的答案更多是关于如何设置 Web 服务,而不是关于如何执行连接到它的过程,但我认为我会 post 考虑这两个方面,因为两者都很重要为了将 Web 服务消费到项目中并使用它。