如何在控制台 cron 作业应用程序 C# vs2012 中从 WSDL 创建 SOAP/XML 客户端
How to create SOAP/XML client from WSDL in console cron job app C# vs2012
我在 Java 和 C++ 方面有很多 SOAP/XML 和 REST/JSON 经验,但在 .NET 方面我几乎是个新手。我必须在 VS 2012 中从 C# 中的 WSDL 创建一个 SOAP 客户端。该应用程序不是基于 Web 的应用程序,而是一个控制台应用程序,每 24 小时将 运行 作为 cron 作业。它必须向 Web 服务查询令牌,执行客户端数据库查找,然后使用令牌用任何新的令牌更新 Web 服务上的客户端 ID 列表 - 仅两次调用。
公司有一个测试器,我可以在其中手动输入 SOAP 消息(信封和内容),单击 运行 按钮,window 会在其 SOAP 信封中显示正确的响应.我唯一的困惑似乎与端点有关。 WSDL 生成的客户端应该处理所有事情。
我不太了解 C# (5)、.NET 框架 (4.5.x) 或较新的 .NET 版本的 VS(我一直在使用 Eclipse、IntelliJ IDEA、甚至过去十年甚至更长时间的 jEdit)。
我已经看到了十几种不同的 "solutions" 这个问题,范围从 WSDL.EXE 到 SiteUtil.Exe 通过添加 WSDL 文件作为(网络?)参考或使用其中之一NuGet 插件。问题是我发现的每个解决方案似乎都假设客户端应用程序是基于其中一个 Web 模板构建的。我必须在纯 C# 中以后台 .exe 的形式执行此操作,而我的应用程序中没有任何基于 Web 的支持或交互。
对生成客户端源代码的最佳(希望是最简单的)方法有什么建议吗?
你不是唯一一个感到困惑的人。您必须意识到经典 SOAP (asmx/wsdl) 被认为是一项 "outdated" 技术(由 Microsoft 提供),因此如今它隐藏在工具集中以支持更新的技术。最基本的方法是在 Visual Studio 本身的解决方案资源管理器中将其添加为参考。这是一步一步的:
- 创建控制台应用程序
- 在解决方案资源管理器中,右键单击引用节点并选择添加服务引用
- 忽略出现的大部分对话框,直接进入高级:
- 从服务引用设置的底部,选择添加 Web 引用...
- 现在填写您的 ASMX 的位置,点击小箭头,等待工具发现服务,然后点击添加引用
- 这将为您的项目添加一个 Web 引用,然后您可以使用它来访问 Web 服务的方法。
[编辑](回答你的问题)
如果磁盘上有 .WSDL 文件,只需在“添加 Web 引用”对话框的 URL 框中输入文件在磁盘上的位置:
在这种情况下,生成的服务具有 WebReference 的默认命名空间(当然,除非您更改它),并且您很可能希望显式设置 URL:
var service = new WebReference.GlobalWeather {Url = "http://www.webservicex.net/globalweather.asmx"};
var weather = service.GetWeather("Amsterdam", "Netherlands");
Console.WriteLine(weather);
我在 Java 和 C++ 方面有很多 SOAP/XML 和 REST/JSON 经验,但在 .NET 方面我几乎是个新手。我必须在 VS 2012 中从 C# 中的 WSDL 创建一个 SOAP 客户端。该应用程序不是基于 Web 的应用程序,而是一个控制台应用程序,每 24 小时将 运行 作为 cron 作业。它必须向 Web 服务查询令牌,执行客户端数据库查找,然后使用令牌用任何新的令牌更新 Web 服务上的客户端 ID 列表 - 仅两次调用。
公司有一个测试器,我可以在其中手动输入 SOAP 消息(信封和内容),单击 运行 按钮,window 会在其 SOAP 信封中显示正确的响应.我唯一的困惑似乎与端点有关。 WSDL 生成的客户端应该处理所有事情。
我不太了解 C# (5)、.NET 框架 (4.5.x) 或较新的 .NET 版本的 VS(我一直在使用 Eclipse、IntelliJ IDEA、甚至过去十年甚至更长时间的 jEdit)。
我已经看到了十几种不同的 "solutions" 这个问题,范围从 WSDL.EXE 到 SiteUtil.Exe 通过添加 WSDL 文件作为(网络?)参考或使用其中之一NuGet 插件。问题是我发现的每个解决方案似乎都假设客户端应用程序是基于其中一个 Web 模板构建的。我必须在纯 C# 中以后台 .exe 的形式执行此操作,而我的应用程序中没有任何基于 Web 的支持或交互。
对生成客户端源代码的最佳(希望是最简单的)方法有什么建议吗?
你不是唯一一个感到困惑的人。您必须意识到经典 SOAP (asmx/wsdl) 被认为是一项 "outdated" 技术(由 Microsoft 提供),因此如今它隐藏在工具集中以支持更新的技术。最基本的方法是在 Visual Studio 本身的解决方案资源管理器中将其添加为参考。这是一步一步的:
- 创建控制台应用程序
- 在解决方案资源管理器中,右键单击引用节点并选择添加服务引用
- 忽略出现的大部分对话框,直接进入高级:
- 从服务引用设置的底部,选择添加 Web 引用...
- 现在填写您的 ASMX 的位置,点击小箭头,等待工具发现服务,然后点击添加引用
- 这将为您的项目添加一个 Web 引用,然后您可以使用它来访问 Web 服务的方法。
[编辑](回答你的问题)
如果磁盘上有 .WSDL 文件,只需在“添加 Web 引用”对话框的 URL 框中输入文件在磁盘上的位置:
在这种情况下,生成的服务具有 WebReference 的默认命名空间(当然,除非您更改它),并且您很可能希望显式设置 URL:
var service = new WebReference.GlobalWeather {Url = "http://www.webservicex.net/globalweather.asmx"};
var weather = service.GetWeather("Amsterdam", "Netherlands");
Console.WriteLine(weather);