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

标签 c# wsdl soap-client cron-task

我在 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 本身的解决方案资源管理器中将其添加为引用。这是一个循序渐进的步骤:

  1. 创建控制台应用程序
  2. 在解决方案资源管理器中,右键单击“引用”节点并选择添加服务引用 Add Service Reference from within Visual Studio
  3. 忽略出现的大部分对话框,直接进入高级:enter image description here
  4. 从服务引用设置的底部,选择添加 Web 引用... Add Web Reference
  5. 现在填写您的 ASMX 的位置,点击小箭头,等待工具发现服务,然后点击添加引用 Add Web Reference - web service details
  6. 这将为您的项目添加一个 Web 引用,然后您可以使用它来访问 Web 服务的方法。 Web reference within project

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

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

在这种情况下,生成的服务有一个默认的 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/

相关文章:

C# 如何使用存储在构造函数变量中的类名创建新对象?

c# - 从子 ViewModel 到父 ViewModel 的属性返回值

wsdl - 来自 WSDL 的 Spring-ws 客户端

php - SOAP 客户端返回无法加载外部实体

php - 将 longList 参数从 php 传递给 TECDOC webservice

php - 如何在 php 的 SoapClient 中设置和禁用 header ?

c# - 我可以直接下载csv文件而不使用csvhelper定义文件路径吗?

c# - 当鼠标悬停在内部 ListView 上时,ListView 内的 WPF ListView 不滚动

java - XJC [错误] "//*[local-name()=' 架构的 XPath 评估']“导致目标节点为空

java - SOAPExceptionImpl 错误响应 : 404Not Found if i don't do soapMessage. writeTo(System.out);