深夜写完的代码——快速实现.NET(.net framework/.net core+)动态访问webservice服务
内容提要
本文介绍了一种动态访问webservice服务接口的方法,避免了手动更新服务引用的麻烦。作者创建了一个webservice服务用于测试,提供了三个服务接口,包括无参数、字符串参数和多个实体类参数。通过使用WebserviceHelper对象和asmx的url地址,可以实现动态访问webservice服务接口。作者还提供了一些核心代码和演示代码供读者参考。
延伸解读
动态访问的适用场景与优势
当Webservice接口频繁更新时,传统服务引用方式需要手动更新引用并重新发布,而本文介绍的动态访问方法通过解析WSDL在运行时获取服务信息,避免了这一繁琐过程。该方法支持.NET Framework 4.6.1+、.NET Core+及.NET 5+,通过NuGet包Wesky.Net.OpenTools即可使用,适合需要灵活调用多个Webservice或接口不稳定的场景。
参数传递与返回值解析机制
动态调用时,参数个数必须与远程服务方法参数个数严格匹配,否则会返回错误信息。参数通过XmlConvertor.SerializeObjectToXml序列化为XML,返回值则根据类型不同采用不同解析方法:基础类型使用解析基础类型值的方法,实体类需使用ExtractCustomerValueFromXml方法并匹配本地实体类。返回值封装在OpenToolResult中,通过IsSuccess和Message属性判断调用状态。
使用注意事项与限制
调用前需确保asmx地址添加?wsdl后缀,以便获取服务元数据。WebserviceHelper会缓存服务信息,默认过期时间86400秒,可通过expireSecond参数调整。注意,.NET Framework 4.6以下版本不适用。若参数个数不匹配或服务无法加载,将返回具体错误信息,便于排查问题。
Q&A
如何动态访问webservice服务接口?
可以通过实例化WebserviceHelper对象,并使用asmx的url地址来动态访问webservice服务接口。
支持哪些.NET版本进行webservice访问?
请求端程序支持.NET Framework 4.6.1+、.NET Core+和.NET 5+所有版本。
如何处理webservice的返回值?
返回值的解析方法需要匹配本地的实体类,可以使用ExtractCustomerValueFromXml方法进行解析。
可以传递多少个参数给webservice?
参数可以传0个或多个,具体数量需要与服务接口的参数个数匹配。
如何获取演示代码和测试源码?
可以在公众号【Dotnet Dancer】后台回复“动态接口”进行下载。
动态访问webservice的主要优势是什么?
动态访问可以避免手动更新服务引用的麻烦,提高了开发效率。