一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - Asp.NET Core 如何調(diào)用WebService的方法

Asp.NET Core 如何調(diào)用WebService的方法

2020-06-01 14:34Tommy198926 ASP.NET教程

這篇文章主要介紹了Asp.NET Core 如何調(diào)用WebService的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

0.使用背景

因為現(xiàn)在的項目都是基于 .NET Core 的,但是某些需要調(diào)用第三方的 WebService 服務(wù),故有了此文章。其基本思路是通過微軟提供的 Svcutil 工具生成代理類,然后通過 System.ServiceModel 來調(diào)用代理類所提供的對象與方法。

1.配置準(zhǔn)備

1.1 新建并編輯項目

首先新建一個新的 .NET Core 控制臺程序,通過命令行窗口或者 Powershell 執(zhí)行以下命令新建一個項目。

?
1
dotnet new console

Asp.NET Core 如何調(diào)用WebService的方法

然后編輯項目文件 WebServiceConsole.csproj ,并在其中加入以下內(nèi)容:

?
1
2
3
<ItemGroup>
 <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
</ItemGroup>

這樣最終 WebServiceConsole.csproj 的內(nèi)容會是這樣子的。

?
1
2
3
4
5
6
7
8
9
10
11
<Project Sdk="Microsoft.NET.Sdk">
 
 <PropertyGroup>
 <OutputType>Exe</OutputType>
 <TargetFramework>netcoreapp2.1</TargetFramework>
 </PropertyGroup>
 
 <ItemGroup>
 <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
 </ItemGroup>
</Project>

繼續(xù)打開命令行窗口或者 Powershell 執(zhí)行以下命令,還原項目文件的包。

?
1
dotnet restore

Asp.NET Core 如何調(diào)用WebService的方法

1.2 代理類生成

現(xiàn)在準(zhǔn)備工作做好了,現(xiàn)在我們可以使用 dotnet svcutil 命令來生成代理類,或者你可以到 WindowsSDKs 的目錄下找到 SvcUtil.exe 來執(zhí)行代理類生成操作。

dotnet svcutil [WebService 地址]

上面是命令格式,比如說我這里有一個 WebService 提供的接口,其地址為 http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl ,那么我們需要打開命令行工具,執(zhí)行以下命令來生成代理類。

 

復(fù)制代碼 代碼如下:
dotnet svcutil http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl

Asp.NET Core 如何調(diào)用WebService的方法

成功之后會看到文件夾里面多了一個文件夾。

注意,在生成代理類之后,我們還需要再執(zhí)行一次 dotnet restore 來還原代理類當(dāng)中所使用到的 NuGet 包。

2.調(diào)用 WebService 接口

生成代理類之后,重新打開項目,可以看到多了一個 ServiceModel1 的文件夾,在里面還有一個 Reference.cs 的文件,這個文件里面的內(nèi)容就是根據(jù)我們之前提供的 Url 生成的代理類了。

用法的話很簡單,需要三步,在這里我直接在 Main() 方法內(nèi)部寫調(diào)用方法了,注意這里基本上所有生成的方法都是異步方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.ServiceModel;
using System.Threading.Tasks;
 
namespace WebServiceConsole
{
 class Program
 {
 static async Task Main(string[] args)
 {
  // 創(chuàng)建 HTTP 綁定對象
  var binding = new BasicHttpBinding();
  // 根據(jù) WebService 的 URL 構(gòu)建終端點對象
  var endpoint = new EndpointAddress(@" http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl");
  // 創(chuàng)建調(diào)用接口的工廠,注意這里泛型只能傳入接口
  var factory = new ChannelFactory<IExpressService>(binding, endpoint);
  // 從工廠獲取具體的調(diào)用實例
  var callClient = factory.CreateChannel();
  // 調(diào)用具體的方法,這里是 sfexpressServiceAsync 方法。
  var result = await callClient.sfexpressServiceAsync(new sfexpressService());
 
  Console.ReadLine();
 }
 }
}

3.注意事項

報文長度問題,我在call 一個QAS service時,因為報文過長,出過錯誤,所以報文長度最好手動設(shè)置一下,防止默認(rèn)長度不夠(默認(rèn)長度我測試是65536)。

?
1
binding.MaxReceivedMessageSize=2000000

https需要設(shè)置。代碼如下:

?
1
2
3
4
5
6
channelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication =
new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.None,
RevocationMode = X509RevocationMode.NoCheck
};

在call某些特殊的Web Service時,生成的代理類model無法解析服務(wù)返回報文,這種情況我只在Call QAS時遇到,在這里就詳細(xì)描述下問題,QAS是一個國外提供地址校驗的服務(wù)提供商,我們用他們提供的一個軟件安裝后生成的Web Service服務(wù)在轉(zhuǎn)發(fā)到他們自己的服務(wù)上。所以在生成代理類的時候,就出現(xiàn)生成代理類里面的model無法解析他的返回報文,經(jīng)過查閱代理類代碼,發(fā)現(xiàn)他在生成返回報文的model中,返回字段有些會加上一個特性標(biāo)記,而這些標(biāo)記是錯誤的,所以只要去掉就行。
例:

?
1
2
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public string Country { get; set; }

Update如下即可

?
1
public string Country { get; set; }

4.參考資料:

https://docs.microsoft.com/en-us/dotnet/core/additional-tools/dotnet-svcutil-guide

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.jianshu.com/p/aae85122f20f

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草热久精品视频在线观看 | 香蕉eeww99国产精品 | 手机在线观看精品国产片 | 福利一区福利二区 | 鬼吹灯天星术在线高清观看 | 国产精品日韩欧美一区二区 | 日韩精品久久不卡中文字幕 | 日本指交 | 日本色淫 | 免费看视频高清在线观看 | 日韩欧美一区二区三区免费看 | 男人天堂bt | 久久精品一区二区免费看 | 国产未成女年一区二区 | 成人欧美视频在线看免费 | 青青在线观看 | 色一级| 三上悠亚国产精品一区 | 亚洲AV蜜桃永久无码精品无码网 | 东京道一本热大交乱 | 国产精品成人在线播放 | 日本老妇人乱视频 | 国产免费看黄的私人影院 | 日本福利片国产午夜久久 | 99色在线视频 | 包射屋| 日本黄a| 青草视频网站在线观看 | 国产成人精品1024在线 | 日韩视频免费观看 | 免费超级乱淫播放手机版 | 久久伊人久久 | japaneseles女同专区 | 手机跑分排行最新排名 | 久久噜国产精品拍拍拍拍 | 91婷婷射 | 国色天香社区在线视频播放 | 久久精品无码一区二区日韩av | 深夜视频在线播放 | 大乳奶水bbw | 久久精品视在线观看85 |