現在已經是2020了,Net 5也推出了,
但是不可以避免的事,有時候還是得串接一些third party系統的XML Web Service,
我們當然可以用以前的方式直接使用Web參考的方式來呼叫取回XML,
但是常常第三方只會先提供接口,帳號密碼都是暫時的,網址還會更換,
雖然有CI/CD,但是我們總不會希望把帳號密碼跟連結的URI放在程式碼內,
改設定檔就好了通常都會是習慣,
以下範例很簡單,但是很多文字會蓋起來,因為商業機密
首先你一定先使用Web 參考
這功能很多文章都有教,我不重複寫,
然後再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了,一直都沒有好的工具可以寫,我還在找,我還有很多想寫的.
留言列表