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

这篇具有很好参考价值的文章主要介绍了C# .Net6 指定WSDL, 生成Webservice,调用该接口服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

功能

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

实现方式1

  • 使用BasicHttpBinding

通过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(UrlString); // url地址
                serv = new mydemo.TestMyClient(binding, endpoint);
                var result = await serv.invokeAsync(ParamsString); // xml格式的字符串参数
                Console.WriteLine("返回接口数据:\n " + result);
                
            }
            catch(HttpRequestException e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                if (serv != null) 
                {
                    serv.Close();
                }
            }
        }

实现方式2

使用HttpClient

简单做一下封装

- 定义:WsClient
	public class WsClient
    {
        // 接口地址
        private string mUrl = string.Empty;
        // 请求参数
        private string mParam = string.Empty;

         namespace命名空间
        //private string ns = "http://XXX:xx/xx/xx"; // TODO填写上你需要的命名空间名称
        
         请求方法名
        //private string funName = string.Empty;

        public WsClient() 
        { 
            throw new NotImplementedException();
        }

        public WsClient(string url)
        {
            this.mUrl = url;
        }

        public async Task<string> Request(string param)
        {
            if (string.IsNullOrEmpty(mUrl))
            {
                return "接口地址为空!";
            }

            if (!mUrl.Contains("http"))
            {
                return "非法接口地址!";
            }

            if (string.IsNullOrEmpty(param))
            {
                return "请求参数为空!";
            }

            this.mParam = param;

            try
            {
                HttpClient httpClient = new();

                // soap参数
                string payload =
                    @"<?xml version=""1.0""?>  
                        <soap:Envelope xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">  
                            <soap:Body>  
                            <invoke xmlns=""http://xxxxx.yyyyyyyy.com"">  
                                <xmlData>" + mParam +
                           @"</xmlData>  
                            </invoke>  
                            </soap:Body>  
                        </soap:Envelope>";

                // 发送 SOAP 请求并获取响应  
                HttpResponseMessage response = await httpClient.PostAsync(mUrl, new StringContent(payload, Encoding.UTF8, "text/xml"));

                // 解析 SOAP 响应  
                string respStr = await response.Content.ReadAsStringAsync();
                return respStr;
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine("WsClient -> Request()异常 : {0} ", e.Message);
            }

            return "";
        }
    }

调用方式:

string result = await new WsClient(wsUrl).Request(xmlData);

wsUrl: 是你的Webservice接口地址;
xmlData: 是你拼装好协议里约定的xml格式的数据参数,示例如下:
result: 是请求接口,返回的数据,也是xml格式。文章来源地址https://www.toymoban.com/news/detail-765532.html

<?xml version=""1.0"" encoding=""UTF-8""?>
<Request>
    <Name>
        QueryUsers
    </Name>
    <Info>
        <ID>21202012211211</ID>
    </Info>
</Request>

完结

  • 经过简单试验,感觉方式2的性能要略优于方式1的实现。我目前次采用的也是方式2。

到了这里,关于C# .Net6 指定WSDL, 生成Webservice,调用该接口服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第六十五天 API安全-接口安全&WebPack&REST&SOAP&WSDL&WebService

    1.HTTP类接口-测评 2.RPC类接口-测评 3.Web Service类-测评 参考链接:https://www.jianshu.com/p/e48db27d7c70 内容点: SOAP(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范, 是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计 成在WEB上

    2024年02月22日
    浏览(33)
  • 接口漏洞-WebService-wsdl+SOAP-Swagger+HTTP-WebPack

    什么是接口?        接口就是位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像谷歌搜索系统,它提供了搜索接口,简化了你的搜索任务。再像用户登录页面,我们只需要调用我们的登录接口,我们就可以达到登录系统的目的

    2024年02月07日
    浏览(29)
  • C# .Net6搭建灵活的RestApi服务器

    C# .Net6后支持顶级语句,更简单的RestApi服务支持,可以快速搭建一个极为简洁的Web系统。推荐使用Visual Studio 2022,安装\\\"ASP.NET 和Web开发\\\"组件。      关键步骤如下: 包添加了“Newtonsoft.Json”,方便序列化和反序化。 代码中添加了Post和Get的全路径注册,并给出了如何解析请求

    2024年02月21日
    浏览(24)
  • C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误

    C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType = \\\"application/x-www-form-urlencoded\\\";这个类型 那么你发送数据和被调用接口参数名如果不对,则会报下图这个错 我发送的参数名

    2024年02月13日
    浏览(49)
  • C# .NET 如何调用 SAP RFC 接口

    1.分析传参结构 SAP 传参格式对应 .NET 参数格式 SAP 参数 .NET 参数 参数类型 import(导入)——关联类型为数据元素 Param 单个变量参数 import(导出)——关联类型为结构体 Struct 结构体 table Table 表 下面是 SAP 对应参数类型: 2.web.config 配置 配置文件需要客户端名和连接地址和账户密

    2024年02月13日
    浏览(26)
  • C#使用Asp.Net创建Web Service接口并调用

    目录 一.创建Asp.net web应用以及Web Service服务 (1).运行环境 (2)创建项目 二.创建控制台应用来调用上面创建的Web Service 开发工具: Visual Studio 2022 Current (免费社区版) 框架版本: .net framework4.7.2,更高的.net 5 、net6貌似没有默认提供带web service的asp.net 应用模板了。 确保VS的工作负荷有

    2024年01月18日
    浏览(34)
  • java调用webService接口

    1、需求: 由于业务需求对接一个比较老的平台使用到了webService接口,这里记录一下调用方法。 一般有三种方式调用webService接口, 1.1、以HttpURLConnection的方式调用 1.2、使用apache-cxf生成java类调用 1.3、使用AXIS调用WebService 我这边主要是使用的是,第三种,使用AXIS调用WebServi

    2024年02月05日
    浏览(33)
  • 使用postman 调用 Webservice 接口

    使用postman 调用 Webservice 接口,postman,webService,接口,cxf

    2024年02月08日
    浏览(46)
  • c#对接webservice接口

    方式一:需要填写地址,不能映射每个方法 工具类 调用方法: 方式二:需要提前写好方法名,调用简单像调用类方法一样 调用方式:

    2024年02月08日
    浏览(38)
  • .NET6 独立模式部署应用程序(无需客户机安装指定版本.NET运行时)

    下图对于.NET开发人员一定不陌生,尤其是CS架构,客户电脑要运行基于.NET开发的程序,无论是使用C#,还是VB.NET、F#,发布后的程序的运行环境都需要有相应版本的.NET的运行时,否则应用程序将无法正常运行。 BS架构下,在服务器上安装指定版本.NET运行时,工作量可以忽略不

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包