首页 > 编程语言 >asp.net core api 等调用webservice以及 处理返回值踩坑之路

asp.net core api 等调用webservice以及 处理返回值踩坑之路

时间:2022-11-24 22:35:14浏览次数:66  
标签:node core asp webservice image SelectNodes System new 节点


首先添加引用然他自动生成文件



asp.net core api  等调用webservice以及 处理返回值踩坑之路_前端


image.png


点击go services 填写如 ​​http://192.168.1.5/Service1.asmx​​ 里面会加载出来记住名字 如Service1Soap


asp.net core api  等调用webservice以及 处理返回值踩坑之路_javascript_02


image.png


将自动生成


asp.net core api  等调用webservice以及 处理返回值踩坑之路_数据库_03


image.png


下一步 默认 ,完成

然后定位项目文件夹



image.png


查看命名空间 并引用




image.png




image.png


//创建 HTTP 绑定对象
var binding = new BasicHttpBinding();
//根据 WebService 的 URL 构建终端点对象,参数是提供的WebService地址
var endpoint = new EndpointAddress(@"http://192.168.1.5/Service1.asmx");
//创建调用接口的工厂,注意这里泛型只能传入接口 泛型接口里面的参数是WebService里面定义的类名+Soap
var factory = new ChannelFactory<Service1Soap>(binding, endpoint);
//从工厂获取具体的调用实例
var callClient = factory.CreateChannel();
/* //调用具体的方法,这里是 HelloWorldAsync 方法
Task<HelloWorldResponse> responseTask = callClient.HelloWorldAsync(new HelloWorldRequest());
//获取结果
HelloWorldResponse response = responseTask.Result;
// 获取HelloWorld方法的返回值
string result1 = response.Body.HelloWorldResult;*/

// 调用TestMethod方法,不传递参数
string userid = "";
Task<CheckUserResponse> testResponse = callClient.callAsync(new CheckUserRequest(username, password, userid, 0));


假如返回datatable ,但是实际上是System.Xml.Element​​https://docs.microsoft.com/zh-cn/dotnet/api/system.xml.xmlelement?view=net-6.0​

思路:成员对象的innerXml




image.png


刚开始采用如下方法


System.Data.DataTable dataTable = new System.Data.DataTable();
StringReader sr = new StringReader(str2);
、// dataTable.ReadXmlSchema("");//此方法需要readXmlSchema
dataTable.ReadXml(sr);*


提示错误 System.InvalidOperationException:“DataTable does not support schema inference from Xml.”
解决方法是需要填写写入 xmlschema,但是这个东西没有schema样板。
改成如下即可


System.Data.DataSet dsData = new System.Data.DataSet();

dsData.ReadXml(new System.Xml.XmlTextReader(new StringReader(str2)));
System.Data.DataTable dt = dsData.Tables["DT_Webservice"];//HH
System.IO.FileStream stream =
new System.IO.FileStream($@"{directory}\Schema.txt", System.IO.FileMode.Create);
dt.WriteXmlSchema(stream);
foreach (System.Data.DataRow dr in dt.Rows)
{
foreach (System.Data.DataColumn dc in dr.Table.Columns)
{
string n = dc.ColumnName;
string value = dr[n].ToString();
Console.WriteLine("test:" + value + "," + n);
}
}


完美
其中DT_Webservice 是根据 innerxml里面的节点得知,
innerxml大概数据集如下:


<DocumentElement
xmlns="">
<DT_Webservice diffgr:id="DT_Webservice1" msdata:rowOrder="0"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<app_desc>不告诉你</app_desc>
</DT_Webservice>

<DT_Webservice diffgr:id="DT_Webservice34" msdata:rowOrder="33"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<app_desc>你号aaaa</app_desc>
</DT_Webservice>
</DocumentElement>


当然我认为还有一个思路就是直接研究​​System.XML.element​​​ 类的用法直接递归
System.XML.element本身也属于 XmlNode
每个xmlnode都包好childNodes 也就是XmlNodeList 可以直接用下标访问




image.png


List<String> values = new List<string>();
XmlNodeList? list = a.Result.Any1?.SelectNodes("//app_desc")??null;

foreach (XmlNode current in list)
{

String currentText=current.InnerText;
}}


关于 selectNodes语法参考


注意这里AddNamespace方法的前面一个参数用于标记这个命名空间,在下面SelectNodes方法中加上对应的标记。给出的这一段是为了查找数据库连接字符串的节点。顺便附带扯下SelectNodes中XPath的语法:

SelectNodes("node") 从当前子节点中查找节点

SelectNodes("/node") 从根节点的子节点中查找节点

SelectNodes("//node") 从任意位置上查找名为node的节点

SelectNodes(".") 选择当前节点

SelectNodes("..") 选择当前节点父节点

SelectNodes("//node[1]") 选择名为node的第一个节点,注意这里是从1开始,不是从0开始

SelectNodes("/@name") 选择有name属性的节点

SelectNodes("/node[position() < 3]") 选择名为node的前两个节点

SelectNodes("//node[@name]") 选择node节点,并且该节点有name属性

SelectNodes("//node[@name='limit']") 选择node节点,并且该节点有name属性,而且name属性值为limit

SelectNodes("//node[contains(item)]") 选择node节点,该节点存在名字item的子节点,注意,如果有命名空间,这里要加命名空间,XX:item

SelectNodes("//node[contains(item,‘Hello World’)]") 选择node节点,该节点存在名字item的子节点,并且item节点内容为Hello World



除此之外 ,调用webservice采用http访问
假设为

WebService 引用这个​​http://192.1.1/A.asmx​​​ 方法名为checkUser
文档如下




image.png


那么应该是这样的访问 ​​http://192.168.1.1/A.asmx/CheckUser?sUser=1&sPwd=1&ssuserid=1&ssAllow=0​

关于xml返回的 文档 可以看到相关定义,这里方别为请求 和返回。




image.png


可以看到 为xmlxml。

最后还有一种方式最麻烦的调用,就是安卓这边要调用 则找到soap 插件库,调用这么个落后的东西搞那么多麻烦事情。


标签:node,core,asp,webservice,image,SelectNodes,System,new,节点
From: https://blog.51cto.com/u_15458814/5885123

相关文章

  • asp.net core api 基于token的JWT bearer 的鉴权验证实现探索
    .net的各种框架啥的都不是很熟悉,当时只是想怎么实现快速校验授权确保api是通过验证之后才能打开。我说的快速就是不需要写重复的样板代码,通过总体控制,最后发现,似乎也只能通......
  • golang coredump
    golang生成coredump文件refer:   https://blog.csdn.net/xmcy001122/article/details/105665732   http://t.zoukankan.com/lit10050528-p-4811833.html1.设置cor......
  • Java之HttpClient调用WebService接口发送短信源码实战
    摘要Java之HttpClient调用WebService接口发送短信源码实战一:接口文档二:WSDL三:HttpClient方法HttpClient方法一HttpClient方法二HttpClient方法三HttpClient方法四四:封装soap......
  • @Aspect 注解使用详解
    AOP为AspectOrientedProgramming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是​​OOP​​​的延续,是软件开发中的一个......
  • MassTransit - .NET Core 的分布式应用程序框架
    简介MassTransit是一个免费的、开源的.NET分布式应用程序框架。MassTransit使创建应用程序和服务变得容易,这些应用程序和服务利用基于消息的松散耦合异步通信来实现更......
  • EFCore DBFirst从数据库生成实体类
    目录EFCoreDBFirst从数据库生成实体类官网安装指定NuGet包生成实体类EFCoreDBFirst从数据库生成实体类本示例仅适用于mysql版本,其他版本请根据官网说明进行操作。官网......
  • Aspose.Cells实现excel预览
    ​在WEB项目中经常遇到excel文档在线预览的需求,基本的解决思路有以下几大类:excel文档转PDF、excel文档直接转html、后台读取excel数据返回给前端利用Excel效果的表格插件......
  • .NET Core读写InfluxDB时序数据库的方法教程
    前言在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据......
  • ASP .NET Core 缓存
    缓存可以通过减少生成内容所需的工作,显著提高应用的性能和可伸缩性。缓存最适用于不常更改且生成成本很高的数据。缓存生成的数据副本可以比从源中更快地返回。应该以从......
  • EFCore-实体关系配置
    EFCore-实体关系配置EFCore中实体之间关系的配置的套路:HasXXX(…).WithXXX(…);有XXX、反之带有XXX。XXX可选值One、Many。一对多:HasOne(…).WithMany(…);一对一:H......