處理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 風格請求處理的的內容補充(1)REST
- 請求資料處理
- springmvc處理ajax請求SpringMVC
- 【原始碼分析】- 在SpringBoot中你會使用REST風格處理請求嗎?原始碼Spring BootREST
- DeferredResult——非同步請求處理非同步
- nginx 如何處理一個請求Nginx
- Go Web如何處理Web請求?GoWeb
- yai 請求預處理指令碼AI指令碼
- Netty(二):如何處理io請求?Netty
- Laravel請求處理管道理解Laravel
- 處理 HTTP 請求的註解HTTP
- springmvc原始碼 ---DispatcherServlet 處理請求SpringMVC原始碼Servlet
- SpringMVC(2)-Rest請求風格SpringMVCREST
- 使用RxJava快取Rest請求RxJava快取REST
- 處理請求(AFURLRequestSerialization)和響應(AFURLResponseSerialization)
- 使用cors完成跨域請求處理CORS跨域
- linux如何處理多連線請求?Linux
- SpringBoot 教程之處理非同步請求Spring Boot非同步
- 4、Ktor學習-處理HTTP請求;HTTP
- java webservice 帶請求頭方式處理JavaWeb
- Spring MVC的請求處理邏輯SpringMVC
- SpringBoot可以同時處理多少請求?Spring Boot
- 搜尋 伺服器處理請求伺服器
- options 請求跨域問題處理跨域
- Nacos - 服務端處理心跳請求服務端
- elasticsearch常用請求介面Rest API示例ElasticsearchRESTAPI
- 關於在request請求時,處理請求引數的問題
- Nginx請求處理流程你瞭解嗎?Nginx
- axios中POST請求變成OPTIONS處理iOS
- Node.js如何處理多個請求?Node.js
- 封裝springmvc處理ajax請求結果封裝SpringMVC
- 前後端處理流檔案請求後端
- Apache Tomcat如何高併發處理請求ApacheTomcat
- Laravel 底層是如何處理HTTP請求LaravelHTTP
- Nacos - 服務端處理註冊請求服務端
- Django REST framework的請求與響應DjangoRESTFramework
- SpringBoot使用Axios傳送請求,引數處理Spring BootiOS
- Spring MVC框架處理Web請求的基本流程SpringMVC框架Web
- 用Golang處理每分鐘100萬份請求Golang