處理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。
相關文章
- 在REST SOE中處理JSONRESTJSON
- 示例:建立REST SOEREST
- REST SOE是什麼?REST
- REST SOE模板概覽REST
- 建立REST SOE的schemaREST
- 請求資料處理
- wordpress 處理 ajax 請求
- Mongodb請求處理流程MongoDB
- .NET處理HTTP請求HTTP
- SpringMVC請求處理流程SpringMVC
- 請求處理管道個人理解
- nginx處理http請求流程NginxHTTP
- 【原始碼分析】- 在SpringBoot中你會使用REST風格處理請求嗎?原始碼Spring BootREST
- yai 請求預處理指令碼AI指令碼
- Go Web如何處理Web請求?GoWeb
- DeferredResult——非同步請求處理非同步
- nginx 如何處理一個請求Nginx
- Laravel請求處理管道理解Laravel
- 自定義處理頁面請求
- 使用RxJava快取Rest請求RxJava快取REST
- 使用cors完成跨域請求處理CORS跨域
- Netty(二):如何處理io請求?Netty
- 搜尋 伺服器處理請求伺服器
- springmvc原始碼 ---DispatcherServlet 處理請求SpringMVC原始碼Servlet
- Nacos - 服務端處理心跳請求服務端
- options 請求跨域問題處理跨域
- 處理請求(AFURLRequestSerialization)和響應(AFURLResponseSerialization)
- iOS資料請求超時處理iOS
- .NET處理HTTP請求——摘自網路HTTP
- Django REST framework API 指南(1):請求DjangoRESTFrameworkAPI
- elasticsearch常用請求介面Rest API示例ElasticsearchRESTAPI
- ASP.Net請求處理機制初步探索之旅(5):ASP.Net MVC請求處理流程ASP.NETMVC
- 在客戶端程式中使用REST SOE客戶端REST
- linux如何處理多連線請求?Linux
- 4、Ktor學習-處理HTTP請求;HTTP
- Laravel 底層是如何處理HTTP請求LaravelHTTP
- 前後端處理流檔案請求後端
- Nginx請求處理流程你瞭解嗎?Nginx