我在 Java 和 C++ 方面有很多 SOAP/XML 和 REST/JSON 经验,但在 .NET 方面我几乎是个新手。我必须在 VS 2012 中从 C# 中的 WSDL 创建一个 SOAP 客户端。该应用程序不是基于 Web 的应用程序,而是一个控制台应用程序,每 24 小时将作为 cron 作业运行一次。它必须向 Web 服务查询 token ,执行客户端数据库查找,然后使用 token 用任何新的 token 更新 Web 服务上的客户端 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 的支持或交互。
关于生成客户端源代码的最佳(希望是最简单的)方法有什么建议吗?
最佳答案
你不是唯一一个感到困惑的人。您必须意识到经典 SOAP (asmx/wsdl) 被认为是一种“过时的”技术(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);
关于c# - 如何在控制台 cron 作业应用程序 C# vs2012 中从 WSDL 创建 SOAP/XML 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058579/