如何在控制台 cron 作业应用程序 C# vs2012 中从 WSDL 创建 SOAP/XML 客户端

Mid*_*mer 4 c# wsdl soap-client cron-task

我在 Java 和 C++ 方面有很多 SOAP/XML 和 REST/JSON 经验,但我几乎是 .NET 的新手。我必须在 VS 2012 中从 C# 中的 WSDL 创建一个 SOAP 客户端。该应用程序不是基于 Web 的应用程序,而是一个控制台应用程序,它将每 24 小时作为 cron 作业运行一次。它必须向 Web 服务查询令牌,执行客户端数据库查找,然后使用令牌更新 Web 服务上的客户端 ID 列表,其中包含任何新的客户端 ID - 仅两次调用。

该公司有一个测试器,我可以在其中手动输入 SOAP 消息(信封和内容),单击运行按钮,然后一个窗口显示其 SOAP 信封中的正确响应。我唯一的困惑似乎与端点相关。WSDL 生成的客户端应该处理所有事情。

我不太了解 C# (5)、.NET 框架 (4.5.x) 或较新的 .NET 版本的 VS(在过去的十年多时间里,我一直在使用 Eclipse、IntelliJ IDEA 甚至 jEdit )。

我已经看到了针对这个问题的十几种不同的“解决方案”,从 WSDL.EXE 和 SiteUtil.Exe 到将 WSDL 文件添加为(网络?)引用或使用 NuGet 插件之一。问题是我找到的每个解决方案似乎都假设客户端应用程序是基于其中一个 Web 模板构建的。我必须在纯 C# 中将其作为后台 .exe 执行此操作,而我的应用程序中没有任何基于 Web 的支持或交互。

关于生成客户端源代码的最佳(希望是最简单的)方法有什么建议吗?

Pau*_*Jan 10

您并不孤单。您必须意识到经典的 SOAP (asmx/wsdl) 被认为是“过时的”技术(Microsoft),因此如今它隐藏在工具集中以支持更新的技术。最基本的方法是将其添加为来自 Visual Studio 本身的解决方案资源管理器的参考。这是一个分步说明:

  1. 创建控制台应用程序
  2. 在解决方案资源管理器中,右键单击“引用”节点并选择“添加服务引用”从 Visual Studio 中添加服务引用
  3. 忽略出现的大部分对话框,直接进入高级: 在此处输入图片说明
  4. 从服务引用设置的底部,选择添加 Web 引用... 添加网页参考
  5. 现在填写你的 ASMX 的位置,点击小箭头,等待工具发现服务,然后点击添加引用 添加 Web 参考 - Web 服务详细信息
  6. 这将为您的项目添加一个 Web 引用,然后您可以使用它来访问 Web 服务的方法。项目内的网络参考

[编辑](回答你的问题)

如果磁盘上有 .WSDL 文件,只需在“添加 Web 引用”对话框的 URL 框中输入磁盘上的文件位置:磁盘上的 WSDL

在这种情况下,生成的服务具有 WebReference 的默认命名空间(当然,除非您更改它),并且您很可能希望显式设置 URL:

var service = new WebReference.GlobalWeather {Url = "http://www.webservicex.net/globalweather.asmx"};
var weather = service.GetWeather("Amsterdam", "Netherlands");
Console.WriteLine(weather);
Run Code Online (Sandbox Code Playgroud)