WebService采用HTTP協議傳輸數據,采用XML格式封裝數據。在.Net Core中推薦使用代理類來調用WebService,方便、自動。
引用WS與代理類生成
VS項目 右鍵 添加 引用服務,輸入WS地址,轉跳至對應的服務,點擊完成生成代理類。也可以使用命令引用。
- dotnet svcutil WebServiceUrl
調用WS接口
- /// <summary>
- /// 預檢信息上傳(WS)
- /// </summary>
- public bool UploadHspinfo(string xml)
- {
- try
- {
- _Logger.LogInformation("Updload:WS Init");
- BasicHttpBinding binding = new BasicHttpBinding();
- EndpointAddress address = new EndpointAddress(_UploadConfig.WSUrl);
- ServiceReference.DataWebServiceIClient client = new ServiceReference.DataWebServiceIClient(binding, address);
- var res = client.saveB_HspinfoListAsync(xml);
- return res.Result.Body.@return;
- }
- catch (Exception ex)
- {
- _Logger.LogInformation("Updload:WS Error");
- _Logger.LogInformation(ex.ToString());
- return false;
- }
- }
Xml轉化
WS采用Xml格式傳輸數據,在調用第三方WS接口時,需要符合對應數據結構。實體對象轉Xml需要對格式處理,比如去除頭部聲明。下面方法可以獲得干凈的Xml字符串,方便組裝。
- public static string ModelToXml<T>(T model)
- {
- MemoryStream stream = new MemoryStream();
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- XmlWriterSettings settings = new XmlWriterSettings
- {
- Indent = true,
- IndentChars = " ",
- NewLineChars = "\r\n",
- Encoding = Encoding.UTF8,
- OmitXmlDeclaration = true // 不生成聲明頭
- };
- using (XmlWriter xmlWriter = XmlWriter.Create(stream, settings))
- {
- // 強制指定命名空間,覆蓋默認的命名空間
- XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
- namespaces.Add(string.Empty, string.Empty);
- serializer.Serialize(xmlWriter, model, namespaces);
- xmlWriter.Close();
- };
- stream.Position = 0;
- StreamReader sr = new StreamReader(stream);
- string str = sr.ReadToEnd();
- return str;
- }