[C#] 取得.net WebService(.asmx) 的函式(Method)名稱
2013-06-11
上篇文章提到了 取得.net WebService(.asmx) 的自訂複雜型別
這篇文章,我們來取得,關於Web Service 中所有的 Method 名稱.
看一下 WSDL
其實都藏在 wsdl:operation 的 name 的屬性中..
所以我們依然透過 ServiceDescription 來取得..
/// <summary>/// 透過網址取得資料後 並且讀為 GeServiceDescriptionFromServicePath/// </summary>/// <param name="servicePath"></param>/// <returns></returns>private ServiceDescription GeServiceDescriptionFromServicePath(string servicePath)
{if (!servicePath.ToLower().Contains("?wsdl"))
{ servicePath = servicePath + "?wsdl";}
var wc = new WebClient();wc.Encoding = UTF8Encoding.UTF8;
byte[] byteArray = Encoding.UTF8.GetBytes(wc.DownloadString(servicePath)); var stream = new MemoryStream(byteArray); return ServiceDescription.Read(stream);}
protected void btnGetMethods_Click(object sender, EventArgs e)
{var serviceDesc = GeServiceDescriptionFromServicePath(txtWebServicePath.Text);
//取得所有Method Name .var allMethodNames = GetAllMethodsName(serviceDesc);
ltlResult.Text = ""; ltlResult.Text += "<ul>";foreach (var s in allMethodNames)
{ltlResult.Text += "<li>" + s + "</li>";
}
ltlResult.Text += "</ul>";}
/// <summary>/// 取得所有 ServiceDescription 中 Methods 的名稱/// </summary>/// <param name="serviceDescription"></param>/// <returns></returns>private string[] GetAllMethodsName(ServiceDescription serviceDescription)
{var res = new List<string>();
foreach (PortType portType in serviceDescription.PortTypes)
{ res.AddRange(from Operation operation in portType.Operations select operation.Name);}
return res.ToArray();}
結果:
中間都抽離的很簡單易懂..需要用到就自行改寫瞜.
Code:
標籤:
.Net
,
ASP.net
,
C#
,
WebService
-- Yesterday I wrote down the code. I bet I could be your hero. I am a mighty little programmer. 如果這篇文章有幫助到您,簡單留個言,或是幫我按個讚,讓我有寫下去的動力...
