这个功能只有java语言版的可以搜到代码。本人结合帮助文档,完成了这个功能
为了便于理解,先把帮助文档中对这部分的说明码上,结尾附上我测试能正常执行功能的代码
SuperMap iServer 的 REST API 提供了快速发布 GIS 服务的功能,可以通过workspace 资源的Post请求来实现,目前数据类型只支持 UGC 工作空间数据。
对于管理中的资源,通过 REST 方式访问时需要携带验证信息,比如可以在 HTTP 请求头中携带Cookie信息,或者可以基于Token访问受保护的Rest服务资源。。其中 Cookie 信息可以在登录时获取,而 SuperMap Token 可以通过 token 资源获取。
示例:通过 workspaces 资源快速发布工作空间,创建 REST 地图服务、REST 数据服务和 WMS111服务,携带令牌 token=9AUyV9QOpTARW-Zj1yybXZM2718buccAX0i6yPTLbQ6OO5BlhP7QE71Dz0RylqkdH33rU3-ZYxslYR-ay0XnXA.. 。
对 workspaces 资源,发送 POST 请求:
http://localhost:8090/iserver/manager/workspaces.rjson?returnContent=true&token=9AUyV9QOpTARW-Zj1yybXZM2718buccAX0i6yPTLbQ6OO5BlhP7QE71Dz0RylqkdH33rU3-ZYxslYR-ay0XnXA..
将 World.sxwu 发布为数据服务、地图服务和 WMS1.1.1服务,传入 rjson 格式请求体如下:
{
"servicesTypes": ["RESTMAP", "RESTDATA", "WMS111"],
"workspaceConnectionInfo": "../samples/data/World/World.sxwu"
}
其中:
- servicesTypes:设置按照接口划分的服务类型,可以设置多个服务,服务器会依次返回创建的服务。如["RESTDATA", "RESTMAP", "WMS111", "WFS100"]。
- workspaceConnectionInfo:设置文件型工作空间的路径或者数据库型工作空间的数据库的连接信息。文件型工作空间路径可以是绝对路径或相对路径,如"../samples/data/World/World.sxwu"或“D:\\samples\\data\\World\\World.sxwu”,如果设置了密码则应一并传入,如“password=test”;:
"workspaceConnectionInfo":"server=orcl203;username=test;password=test;type=ORACLE;database=;name=testWorkSpace;driver=null"
上述 POST 请求发送后,服务端返回创建的服务列表如下所示:
[{
"serviceAddress": "http://localhost:8090/iserver/services/map-world2/rest",
"serviceType": "RESTMAP"
},
{
"serviceAddress": "http://localhost:8090/iserver/services/data-world2/rest",
"serviceType": "RESTDATA"
},
{
"serviceAddress": "http://localhost:8090/iserver/services/map-world2/wms111",
"serviceType": "WMS111"
}]
即为快速创建的三个服务实例的地址,其中服务组件名如有重复会自动增加数字后缀,如 map-world2。
根据上面的我的本地代码
/// <summary>
/// 快速发布服务
/// </summary>
/// <param name="url">
/// <param name="json"></param>
public void PublishServer2(string url, String json)
{
try
{
//注意这个地方目录"D:/zsm3D/clipcode/t1.smwu"用"/",别用"\"
// json = "{\"servicesTypes\": [\"RESTREALSPACE\"],\"workspaceConnectionInfo\": \"D:/zsm3D/clipcode/t1.smwu\"}";
// url = "http://192.168.1.250:8081/iserver/manager/workspaces.rjson?returnContent=true&token=zctGmCR1kM7gWlPrKnyH5e22rjkYQgDuElVVCFoGD-M5OAnq5RaJxtamhoiABpLcDNEyH8NbjjQuCxktrht9Gg..";
// 令牌token的值可以从后台生成令牌
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
byte[] byteData = Encoding.UTF8.GetBytes(json);
int length = byteData.Length;
request.ContentLength = length;
Stream writer = request.GetRequestStream();
writer.Write(byteData, 0, length);
writer.Close();
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
if (responseString.Contains("serviceAddress"))
MessageBox.Show("发布服务成功");
else
MessageBox.Show("发布服务失败");
}
catch
{
MessageBox.Show("发布服务失败");
}
}