最近因要與.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;
}
文章標籤
全站熱搜
