ASP.NET CORE WEB API 调用WebService数据

       不同的系统之间经常会需要数据的交换对接,而Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。(百度百科);

       使用ABP.NET 框架调用客户提供的数据,简单的记录一下过程;

1、在依赖项添加引用服务ASP.NET CORE  WEB API 调用WebService数据

 2、填写webservice地址 然后点击转到ASP.NET CORE  WEB API 调用WebService数据

 3、引用服务成功后

ASP.NET CORE  WEB API 调用WebService数据

 4、调用webservice里面的方法获得数据并解析

                // 创建 HTTP 绑定对象
                var binding = new BasicHttpBinding();
                //最大获取数据
                binding.MaxReceivedMessageSize = 2147483647;
                // 根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
                var endpoint = new EndpointAddress(@"http://00.000.002.09/00/00/00.asmx");
                // 创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
                var factory = new ChannelFactory<ReadMESSoap>(binding, endpoint); 
                // 从工厂获取具体的调用实例
                var callClient = factory.CreateChannel();// 调用具体的方法,这里是 GetUserTimeBySQLAsync 方法 这一步就能获得数据了。  我这里拿到的是ArrayOfXElement 数据
                var result = await callClient.GetUserTimeBySQLAsync("where name='林小强'");
                //创建List集合
                List<SwipeCardData> CardDataList = new List<SwipeCardData>();
                //返回是xelement的集合,首先获得真正的表的节点。使用Nodes.Descendants("Table"),获得指定标签,然后foreach遍历 解析
                foreach (XElement el in result.Nodes.Descendants("Table"))
                {
                    SwipeCardData CardData = new SwipeCardData();
                    //根据节点循环赋值给SwipeCardData类
                    foreach (XElement ell in el.Nodes())
                    {
                        switch (Convert.ToString(ell.Name))
                        {
                            case "LineID":
                                CardData.ProcessID = Convert.ToInt32(ell.Value);
                                break;
                            case "LineDesc":
                                CardData.ProcessName = ell.Value;
                                break;
                            case "StationID":
                                CardData.StationID = Convert.ToInt32(ell.Value);
                                break;
                            case "StationDesc":
                                CardData.StationNmae = ell.Value;
                                break;
                            case "UserID":
                                CardData.EmployeeNum = ell.Value;
                                break;
                            case "UserName":
                                CardData.EmployeeName = ell.Value;
                                break;
                            case "StatusDesc":
                                CardData.type = ell.Value;
                                break;
                            case "RecordTime":
                                CardData.AtWork = Convert.ToDateTime(ell.Value).ToString("yyyy-MM-dd HH:mm:ss.fff");
                                break;
                            case "ID":
                                CardData.Id = Guid.NewGuid();
                                break;
                            default:
                                break;
                        }
                    }
                    //将转换后的数据 添加到我设定属性的数组中
                    CardDataList.Add(CardData);
                }