Asp.NET核心如何调用网络服务的方法
0.使用背景
因为现在的项目都是基于。NET Core,但有些需要调用第三方的WebService服务,本文是有提供的。基本思想是通过微软提供的Svcutil工具生成代理类,然后通过System.ServiceModel调用代理类提供的对象和方法。
1.配置准备
1.1创建和编辑项目
首先,创建一个新的。NET Core控制台程序,并通过命令行窗口或Powershell执行以下命令创建一个新项目。
dotnet新控制台
然后编辑项目文件WebServiceConsole.csproj并添加以下内容:
item group dotnetclitool reference include=' dotnet-svcutil ' version=' 1.0。*//item group,这样WebServiceConsole.csproj的内容将如下所示。
Project Sdk='Microsoft。 Sdk ' Property GrouP OutPuttypeExe/OutPuttype TargetFrameWorkNetCoreApp 2.1/TargetFrame/Property GrouP item group dotnetclitool reference include=' dotnet-svcutil ' version=' 1.0。*//item group/project继续打开命令行窗口或Powershell执行以下命令来恢复项目文件的包。
网络恢复
1.2代理类生成
现在准备工作已经完成,我们可以使用dotnet svcutil命令生成代理类,或者您可以在WindowsSDKs的目录中找到SvcUtil.exe来执行代理类生成操作。
Dotnet svcutil [WebService地址]
以上是命令格式。比如我有一个WebService提供的接口,它的地址是http://localhost 33603000/bsp-oisp/ws/sfexpressservice?Wsdl,那么我们需要打开命令行工具并执行以下命令来生成代理类。
复制代码如下: dotnet svcutil http://localhost 33603000/bsp-oisp/ws/sfexpressservice?wsdl】(http://localhost :3000/bsp-oisp/ws/sfexpressService?服务描述语言
成功后,您将看到文件夹中还有一个文件夹。
请注意,在代理类生成之后,我们需要再次执行dotnet restore来恢复代理类中使用的NuGet包。
2.调用网络服务接口
代理类生成后,重新打开项目,可以看到多了一个ServiceModel1的文件夹,里面还有一个Reference.cs的文件。这个文件中的内容是根据我们之前提供的Url生成的代理类。
用法非常简单,需要三个步骤。这里我直接在Main()方法中编写调用方法。请注意,这里生成的方法基本上都是异步方法。
使用系统;使用系统。ServiceModel使用系统。线程化。任务;命名空间web服务控制台{类程序{静态异步任务main(string[]args){//创建一个HTTP绑定对象varbinding=new basichtpbinding();//构建端点对象var endpoint=新端点地址(@ ' http://localhost :3000/bsp-oisp/ws/sfexpressservice?wsdl】(http://localhost :3000/bsp-oisp/ws/sfexpressService?wsdl’);//创建调用接口的工厂。请注意,泛型只能传递到接口varfactory=new channel factory expressservice(绑定,端点)中;//从工厂获取具体的调用实例var call client=factory . create channel();//调用具体的方法,这里是sfexpressServiceAsync方法。var result=wait call client . sfexpressserviceasync(新的sfexpressService());控制台。ReadLine();} }}3.预防措施
消息长度问题:当我调用QAS服务时,由于消息太长并且出现错误,最好手动设置消息长度,以防止默认长度不足(我测试的默认长度是65536)。
binding . maxreceivedmessagesize=2000000 https需要设置。代码如下:
channelFactory。凭据。service certificate . sslce certificate authentication=new x509 service certificate eauthentication(){ certificate evaluidationmode=x509 certificate evaluidationmode。无,撤销模式=撤销模式。no check };在调用一些特殊的Web Services时,生成的代理类模型无法解析服务返回消息,这是我在调用QAS时才会遇到的。在这里,我将详细描述这个问题。QAS是一家提供地址验证的外国服务提供商,我们使用他们提供的软件来安装生成的web服务,并将其转发给他们自己的服务。因此,当生成代理类时,生成的代理类中的模型似乎无法解析其返回消息。查阅代理类代码后发现,生成返回消息的模型中有些返回字段会添加特征标签,这些标签是错误的,去掉就可以了。示例:
[系统。XML . serialization . xmlelelementattribute(Order=0)]公共字符串Country { get设置;}更新如下
公共字符串Country { get设置;}4.参考文献:
https://docs . Microsoft.com/en-us/dotnet/core/additional-tools/dotnet-svcutil-guide
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:Asp.NET核心如何调用网络服务的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。