由于server中名称可能相同,所以用数组存放
public static Dictionary<string, string[]> ListServices_RESTAadmin(string restAdmin, string userName, string password, string folder)
{
string[] serverlist = new string[1];
Dictionary<string, string[]> pServiceType = new Dictionary<string, string[]>();
try
{
string token = GenerateAGSToken_RESTAdmin(restAdmin, userName, password);
//使用WebRequest发送请求
restAdmin = restAdmin.EndsWith("/") ? restAdmin.Substring(0, restAdmin.Length - 1) : restAdmin;
string serviceUrl = restAdmin + "/" + folder;
WebRequest request = WebRequest.Create(serviceUrl);
string postcontent = "f=json&token=" + token;
//json格式
Byte[] content = Encoding.UTF8.GetBytes(postcontent);
request.ContentLength = content.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(content, 0, content.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
Stream responseStrem = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStrem);
string result = reader.ReadToEnd();
int index = result.IndexOf("services");
IJSONReader2 pJsonReader = new JSONReaderClass();
IJSONObject pOb = pJsonReader.ParseJSONString(result) as IJSONObject;
if (folder == "")
{
//根目录
pServiceType.Add("/", serverlist);
}
else
{
pServiceType.Add(folder, serverlist);
}
IJSONArray pFodArr;
if (pOb.TryGetValueAsArray("folders", out pFodArr))
{
for (int i = 0; i < pFodArr.Count; i++)
{
pServiceType.Add(pFodArr.get_Value(i).ToString(), serverlist);
}
}
if (pOb.MemberExists("services"))
{
object pJs;
if (pOb.TryGetValue("services", out pJs))
{
if (pJs is IJSONArray)
{
IJSONArray pArray = pJs as IJSONArray;
serverlist = new string[pArray.Count * 2];
for (int i = 0; i < pArray.Count; i++)
{
if (pArray.get_Value(i) is IJSONObject)
{
IJSONObject pType = pArray.get_Value(i) as IJSONObject;
string serviceName;
//服务的名称
if (pType.TryGetValueAsString("name", out serviceName))
{
serverlist[i * 2] = serviceName;
}
string AGSType;
//服务的类型
if (pType.TryGetValueAsString("type", out AGSType))
{
serverlist[i * 2 + 1] = AGSType;
}
}
}
if (folder == "")
{
pServiceType["/"] = serverlist;
}
else
{
pServiceType[folder] = serverlist;
}
}
}
}
}
catch
{
}
return pServiceType;
}