处理REST SOE请求

关于处理REST SOE请求

SOE的schema中的每个资源和操作都需要绑定一个请求处理函数。该函数包含了请求资源或调用操作的时候的逻辑代码。这些处理函数是你编写大部分ArcObjects代码的地方。

在REST SOE模板中,已经为你写好了一个资源的请求处理函数RootResHandler()。作为示例,它返回了一个简单的"hello:world" JSON字符串。你可以拷贝RootResHandler代码并对其进行修改以便使其满足schema中的其他资源。

资源的处理函数的结构是通过SOESupport库中的.Net委托定义的。这意味着所有的资源请求函数含有相同的签名,如下所示:

[C#]

private byte[] RootResHandler(NameValueCollection boundVariables, string
    outputFormat, string requestProperties, out string responseProperties)
{
    ...
}

REST SOE模板中也包含了一个操作的处理函数SampleOperHandler()。这个简单的示例函数将两个字符串参数“parm1”和“parm2”进行反序列化,并以JSON的形式将其原封不动的作为输出结果进行返回。你可以拷贝改代码并对其进行修改以便使其满足schema中的其他操作。

正如资源的处理函数一样,操作的处理函数的签名也是由委托定义的。二者的委托很相似,唯一的区别是操作的处理函数的委托JSON对象的输入参数。这个JSON对象包含了执行该操作所需的所有的参数,比如当调用buffer操作的时候,这个JSON对象可能包含一个点以及距离信息。示例代码如下:

[C#]

public delegate byte[] OperationHandler(NameValueCollection boundVariables,
    JsonObject operationInput, string outputFormat, string requestProperties, out
    string responseProperties);

当在编写操作的处理函数代码的时候,你所应该注意的是你需要将JSON输入进行反序列化,然后用ArcObjects或其他库进行处理,最后将你的结果序列化称JSON。对JSON进行反序列化以及序列化是最有技巧的一部分。

以非JSON的形式返回结果

有时候可能你需要Web服务以非JSON得形式返回结果,比如返回图片。在这种情况下,你需要在response的属性中设置HTTP响应的Content-Type头。

首先,当定义资源或操作的时候,设置支持的输出格式。下面的代码定义了一个返回png图片的操作。

[C#]

RestOperation pngOper = new RestOperation("generatePng", null, new string[]
{
    "png"
}

, PngHandler);
soeResource.operations.Add(pngOper);

当你定义处理函数的时候,设置最后一个参数responseProperties为你所需要的的Content-Type头的JSON格式。在如下的例子中, content type是image/png。

[C#]

private byte[] PngHandler(System.Collections.Specialized.NameValueCollection
    boundVariables, ESRI.ArcGIS.SOESupport.JsonObject operationInput, string
    outputFormat, string requestProperties, out string responseProperties)
{
    responseProperties = 
        "{\"Content-Type\" : \"image/png\",\"Content-Disposition\": \"attachment; filename=response.png\"}";
    // Add code to generate and return a PNG.
}

上述技巧也可用于返回其他数据格式,比如JPG或XML。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值