close
最近因要與.net framework 4 web進行串接,因舊專案都使用WCF進行資料共享,故在不想調整舊程式為Webapi時,就會需要進行WCF的套用
而.net core在進行服務連接時,因原本回傳為Datatable形式,故在進行程式碼自動建立時,會將回傳資訊轉成xml格式進行回傳
這裡就會需要再由xml轉回Datatable的形式
首先是增加WCF Web服務,路徑在 專案/加入/連線服務
在來放入該WCF的服務網址,看到的應該是這樣
在把這個網址貼到URL中,在點選 移至,如果服務正常應該就會看到公開出來的一些方法,記得要調整命名空間
再來是呼叫WCF範例,原本需傳入
statuClass物件與edition字串,分別成了兩行動作,或可以在建立時一併建立
所有的要丟入的參數系統都會建立在GetChargeDataRequest中
要請WCF Server端回應,則要使用GetChargeDataAsync並傳入參數Request即可
接下來只要收到到GetChargeDataResult結果後,取得裡面的Any1,就可以開始轉換回Datatable囉!
[HttpGet("CallWcfSample")] async public Task<ActionResult<string>> CallWcfSample() { DataTable dt = new DataTable(); try { var req = new CPServiceReference.GetChargeDataRequest(); req.q = new CPServiceReference.statuClass { statu = true }; req.edition = "2022W07"; CPServiceReference.GetChargeDataResponse res = await _CPserviceClient.GetChargeDataAsync(req); var www = res.GetChargeDataResult; dt = _DataTableAPI.ConvertXmlElementToDataTable(www.Any1, "ChargeData"); } catch (Exception ex) { throw ex; } return Newtonsoft.Json.JsonConvert.SerializeObject(dt); }
public DataTable ConvertXmlElementToDataTable(XmlElement xmlElement, string tagName) { XmlNodeList xmlNodeList = xmlElement.GetElementsByTagName(tagName); DataTable dt = new DataTable(tagName); int TempColumn = 0; if (xmlNodeList.Count <= 0) { return dt; } foreach (XmlNode node in xmlNodeList.Item(0).ChildNodes) { TempColumn++; DataColumn dc = new DataColumn(node.Name, System.Type.GetType("System.String")); if (dt.Columns.Contains(node.Name)) { dt.Columns.Add(dc.ColumnName = dc.ColumnName + TempColumn.ToString()); } else { dt.Columns.Add(dc); } } int ColumnsCount = dt.Columns.Count; for (int i = 0; i < xmlNodeList.Count; i++) { DataRow dr = dt.NewRow(); for (int j = 0; j < ColumnsCount; j++) { if (xmlNodeList.Item(i).ChildNodes[j] != null) dr[j] = xmlNodeList.Item(i).ChildNodes[j].InnerText; else dr[j] = ""; } dt.Rows.Add(dr); } return dt; }
文章標籤
全站熱搜