C# .Net6 指定WSDL, 生成Webservice,调用该接口服务

C# .Net6 指定WSDL, 调用该接口服务。

  • IDE: Microsoft Visual Studio Community 2022 (64 位)
  • 平台:.Net6
  • 协议:Soap协议 Xml格式

功能

  • 需要开发一个前置机程序, 用于和硬件程序交互,
  • 已知条件是:嵌入式同事提供另一个约定好的*.wsdl文件作为双方通信的Webservice接口协议,对方是服务端,前置机是客户端

实现

通过WSDL文件,生成WEB服务

注意,这里,我的VS2022的提示步骤和网上查到的操作步骤略有不同,下面的步骤是我的VS2022的操作步骤:

  1. 首先,在 VS2022 中打开 .NET 6 项目或者新建一个 .NET 6 项目。

  2. 在"解决方案资源管理器 "中,右键单击项目名称,然后选择"添加 "->"服务引用"。

  3. 在"添加服务引用"窗口中,有三个选项,

    • OpenAPI
    • gRPC
    • WCF Web Service

    这里选择 WCF Web Service,进入窗口"添加新的WCF Web Service服务引用"

  4. 点击"浏览"按钮,然后从文件系统中选择你的 WSDL 文件。

  5. 选中 WSDL 文件后,服务引用的配置将在窗口下方显示出来。这里可以在下面的输入框,修改命名空间为你想要的名称,点击下一步 ,在新窗口中,可以指定数据类型选项,默认不需要改,点击"完成"。

  6. 此时,VS2022 会根据你的 WSDL 文件生成 Web 服务的代码,即:原Webservice服务的代理类。

  7. 还有一个生成Webservice服务代理类的方法:

    • 用wsdl.exe工具的方式
    • 指令是:wsdl /language:c# /n:Fu /out:d:/MyService.cs C:\Users\Administrator\Desktop\MyService.wsdl)
      • "d:/MyService.cs"是输出目录
      • "C:\Users\Administrator\Desktop\MyService.wsdl"是源wsdl文件的位置
    • 具体用法,可以使用搜索引擎查询,这里不再赘述。
调用该WebService的方法
		public static async Task TestCallWs()  
        {
            mydemo.TestMyClient serv = null;
            try
            {
                var binding = new BasicHttpBinding();
                var endpoint = new EndpointAddress(FSUURL);
                serv = new mydemo.TestMyClient(binding, endpoint);
                var result = await serv.invokeAsync(FSU_Params);
                Console.WriteLine("返回接口数据:\n " + result);
                
            }
            catch(HttpRequestException e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (serv != null) 
                {
                    serv.Close();
                }
            }
        }

完结和思考

  • 其实我一直是想用HttpClient 来调用这个Webservice,因为很多旧的网络请求类,都被建议使用HttpClient代替,HttpClient也支持Soap协议,官网也说HttpClient是网络请求的优化成果,性能更好,但一直调用不通。不知道是WSDL定义不够规范,还是代码的问题。暂时先用 BasicHttpBinding来实现。后续会继续琢磨。
相关推荐
zhy81030226 分钟前
.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署
pdf·.net·excel
初九之潜龙勿用38 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
慧都小妮子1 小时前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
吾与谁归in2 小时前
【C#设计模式(13)——代理模式(Proxy Pattern)】
设计模式·c#·代理模式
吾与谁归in2 小时前
【C#设计模式(14)——责任链模式( Chain-of-responsibility Pattern)】
设计模式·c#·责任链模式
神仙别闹3 小时前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
霍先生的虚拟宇宙网络3 小时前
.net 支持跨平台(桌面)系列技术汇总
.net
djk88884 小时前
.net的winfrom程序 窗体透明&打开窗体时出现在屏幕右上角
.net
向宇it13 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
九鼎科技-Leo13 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf