在客戶端程式中使用REST SOE

孫群發表於2013-01-27

關於在客戶端中使用REST SOE

一旦你在Manager中部署了你的REST SOE,並且早某個服務中起用了它,那麼你就可以在客戶端程式中使用它了。因為SOE的本質是一個Web服務,它接受一些簡單型別的變數作為引數,比如string、double等等。最複雜的可能是向你的SOE中提交表示一系列geometry頂點的JSON資料。


在服務目錄中測試SOE

由於你向Web服務中提交的都是簡單資料型別的資料,所以可以在服務目錄中測試你的SOE。在你的地圖服務中啟用了SOE之後,在服務目錄中導航到地圖服務頁面。在頁面的最底部,你將會看到所支援的擴充套件的SOE。(如果你沒有看到,你需要核查ArcGIS Server管理員是否清除了REST快取。)

如果你在服務目錄中單擊了SOE,你就可以單擊並瀏覽你的SOE所暴露出的資源以及操作。單擊某個操作,你將看到一些輸入框,你可以在其中輸入值已測試SOE的請求和響應是否正常。如果SOE執行正常的話,你應該會看到JSON的輸出結果或者是HTML響應。


編寫使用REST SOE的客戶端程式

無論你使用哪種客戶端API,使用SOE Web服務需要滿足以下條件:

對Web服務傳送請求——這包括構建引數列表並向伺服器傳送完整的Url

對響應結果進行處理——需要知道響應結果的資料格式並能夠在程式中知道如何正確解析出有用的資訊

ArcGIS API for JavaScript中使用REST SOE

如果你在用ArcGIS API for JavaScript開發客戶端程式,你可以使用esri.request()方法傳送Web服務請求。你首先構造一個JSON物件,該物件包含了請求所需要的所有的引數資訊,然後你需要傳遞content物件給esri.request並定義SOE的Url和回撥函式。結果是一個簡單的JavaScript物件。

[JavaScript]

var soeURL = 
    "http://myServer/ArcGIS/rest/services/Yellowstone/MapServer/exts/SpatialQuerySOEREST/SpatialQuery";
. . . var content = {
    'location': "{x:" + point.x + ",y:" + point.y + "}", 'distance': distanceNumber,
        'f': "json"
};
// Do the SOE query.
esri.request({
    url: soeURL, content: content, callbackParamName: "callback", load: function
        (response){
        drawResponseGeometries(response.geometries); responseRecordsToGrid
            (response.records); 
    }
    , error: function(error){
        console.log(error); 
    }
}

);
. . .

在上述程式碼示例中,SOE需要引數location、distance以及f(表示返回的資料格式)。這些引數值通過使用者填寫Web表單獲得,content物件通過這些資訊以JSON的形式構建了所需的所有的引數。

一旦content就緒,就可以通過esri.request()對SOE傳送請求了。需要注意的是該請求需要使用SOE REST方式的Url。

當然,你也必須定義一個回撥函式並決定如何使用返回結果。上面這個SOE返回了包含如下內容的JSON物件:

Geometries

Records

在回撥函式中(此處並沒編寫)可以將geometries以graphics的形式顯示在地圖上,將records以記錄的形式顯示在表格中。


在ArcGIS API for Flex中使用REST SOE

在ArcGIS API for Flex中,你可以通過擴充套件BaseTask類使用你的SOE。BaseTask中的Url屬性就是你的SOE的Url。你可以使用BaseTask的sendURLVariables方法向Web服務傳送請求。返回結果是Flex物件,你可以從中獲取不同的JSON物件。

在ArcGIS API for Silverlight中使用REST SOE

在ArcGIS API for Silverlight中,你可以使用標準的Silverlight程式碼傳送Web服務並處理JSON響應結果,這樣就可以使用SOE了。這些細節可以參考微軟的幫助文件:

How to: Make Requests to HTTP-Based Services(幫助你向SOE傳送請求)

Working with JSON Data (幫助你處理響應結果)

你可以根據興趣檢視 JavaScript, Flex 和 Silverlight APIs中的幫助文件,裡面包含了對於特定API使用SOE的細節資訊。

相關文章