close

現在已經是2020了,Net 5也推出了,

但是不可以避免的事,有時候還是得串接一些third party系統的XML Web Service,

我們當然可以用以前的方式直接使用Web參考的方式來呼叫取回XML,

但是常常第三方只會先提供接口,帳號密碼都是暫時的,網址還會更換,

雖然有CI/CD,但是我們總不會希望把帳號密碼跟連結的URI放在程式碼內,

改設定檔就好了通常都會是習慣,

以下範例很簡單,但是很多文字會蓋起來,因為商業機密

 

首先你一定先使用Web 參考

image

這功能很多文章都有教,我不重複寫,

然後再Service去注入  

private IOptions<EXSystemOption> _exSystemOption;

EXSystemOption是一個Model

public class EXSystemOption : IOptions<EXSystemOption>

映射到 appSetting的 "EXSystem"的節點

這樣 注入後的_exSystemOption就可以取到你在appSetting的設定

例如

    "ExampleOps": {
        "Account": "TestAccount",
        "Password": "TestPassword",
        "ServiceUri": "https://Test,gov.tw/OOXX/SampleWebService.asmx"
    }

 

而在呼叫時

                var account = _exSystemOption.Value.ExampleOps.Account;
                var password = _exSystemOption.Value.ExampleOps.Password;

就可以方便的取到appsetting的設定職

然後依照API文件組成third party需要的request xml 

string requestXml = $"<?xml version =\"1.0\" encoding=\"utf-8\"?><DATA><ACCOUNT>{account}</ACCOUNT><PASSWORD>{password}</PASSWORD></DATA>";

然後我們使用稍早 VS幫我們產生的Connected Service底下的程式碼中的method直接呼叫

ExampleWebServiceSoapClient exSvc = new ExampleWebServiceSoapClient (

 EndpointConfiguration.ExampleWebServiceSoap, //指定是WebServiceSoap還是WebServiceSoap12

_exSystemOption.Value.ExampleOps.ServiceUri //指定服務端點的URI

);                 

var result = await exSvc .GETWYZOOXXasync(requestXml).ConfigureAwait(false);

result就會是回傳的xml,

內容就參考third party提供的文件來發揮了,

後續的處理方式我習慣是用 LinQ to XDocument 直接轉我要的model.

以上

 

文後註:

三年多沒寫blog了,一直都沒有好的工具可以寫,我還在找,我還有很多想寫的.

 

arrow
arrow
    創作者介紹
    創作者 baechang 的頭像
    baechang

    翁百璋與大泡泡的奇幻旅程

    baechang 發表在 痞客邦 留言(0) 人氣()