中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Asp.NET Core怎么調用WebService的方法

發布時間:2021-02-08 10:18:28 來源:億速云 閱讀:557 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Asp.NET Core怎么調用WebService的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

0.使用背景

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

1.配置準備

1.1 新建并編輯項目

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

dotnet new console

Asp.NET Core怎么調用WebService的方法

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

<ItemGroup>
 <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
</ItemGroup>

這樣最終 WebServiceConsole.csproj 的內容會是這樣子的。

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
 <OutputType>Exe</OutputType>
 <TargetFramework>netcoreapp2.1</TargetFramework>
 </PropertyGroup>

 <ItemGroup>
 <DotNetCliToolReference Include="dotnet-svcutil" Version="1.0.*" />
 </ItemGroup>
</Project>

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

dotnet restore

Asp.NET Core怎么調用WebService的方法

1.2 代理類生成

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

dotnet svcutil [WebService 地址]

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

復制代碼 代碼如下:

dotnet svcutil http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl

Asp.NET Core怎么調用WebService的方法

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

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

2.調用 WebService 接口

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

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

using System;
using System.ServiceModel;
using System.Threading.Tasks;

namespace WebServiceConsole
{
 class Program
 {
 static async Task Main(string[] args)
 {
  // 創建 HTTP 綁定對象
  var binding = new BasicHttpBinding();
  // 根據 WebService 的 URL 構建終端點對象
  var endpoint = new EndpointAddress(@" http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl](http://localhost:3000/bsp-oisp/ws/sfexpressService?wsdl");
  // 創建調用接口的工廠,注意這里泛型只能傳入接口
  var factory = new ChannelFactory<IExpressService>(binding, endpoint);
  // 從工廠獲取具體的調用實例
  var callClient = factory.CreateChannel();
  // 調用具體的方法,這里是 sfexpressServiceAsync 方法。
  var result = await callClient.sfexpressServiceAsync(new sfexpressService());

  Console.ReadLine();
 }
 }
}

3.注意事項

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

binding.MaxReceivedMessageSize=2000000

https需要設置。代碼如下:

channelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication =
new X509ServiceCertificateAuthentication()
{
CertificateValidationMode = X509CertificateValidationMode.None,
RevocationMode = X509RevocationMode.NoCheck
};

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

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

Update如下即可

public string Country { get; set; }

關于“Asp.NET Core怎么調用WebService的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云南省| 衡南县| 东平县| 体育| 凉山| 金沙县| 琼结县| 青铜峡市| 同仁县| 富蕴县| 那坡县| 凭祥市| 巴林右旗| 同德县| 济宁市| 晋江市| 习水县| 大同市| 雷州市| 黄陵县| 神池县| 新丰县| 咸宁市| 高州市| 阿合奇县| 永清县| 宁武县| 长春市| 忻州市| 南汇区| 大化| 平凉市| 图木舒克市| 子长县| 德江县| 昌邑市| 漯河市| 望都县| 尼玛县| 滨州市| 武威市|