ArcIMS 連接器--.NET Link 使用方法
??? 作者:Flyingis????
??? 前幾天馬維峰寫了一篇關于ArcIMS文章——《淺析ArcIMS》,主要分析了ArcIMS的基本體系結構和幾種二次開發模式的簡單對比,比筆者之前的《ArcIMS體系結構》分析的透徹許多。
??? ArcIMS二次開發,關注最多的無非是它的連接器(connector)和ArcXML。在這些連接器中,Servlet Connector通過純粹的ArcXML文件來傳輸請求和響應,ColdFusion Connector在其自身的運行環境中使用自定義tags來產生ArcXML請求和響應,Java Connector和ActiveX Connector比較類似,通過一組API(Java Connector還有標簽庫)來產生ArcXML請求和響應,它們是面向對象的開發方式,比較符合一般程序員的思維習慣。.NET Link比較特殊,最初我認為它和Java Connector、ActiveX Connector一樣,通過一系列API來定義、生成ArcXML文件中的節點與屬性,但事實上并非如此,簡單來說,它僅僅是對XML文件的一種搭配與組裝,使用.NET Framework中對XML文件的操縱方式拼裝出所需的ArcXML請求,并接受ArcIMS應用服務器的響應,其參考手冊中只有服務連接和AxlRequest相關的幾個類的說明,也難怪ESRI為什么要給它要取名為.NET Link,而不是.NET Connector。
??? 離ArcGIS 9.2正式發布已經沒有多長時間,.NET Link能否得到改進至少像它的前輩ArctiveX Connector一樣還不清楚。.NET Link的這種開發方式使得開發人員需要更多的關注ArcXML_reference,下面將簡單說明.NET Link的使用方法。
??? 首先,需要將.NET Link的程序集引用到開發環境中,我使用的是Visual Studio 2005,需要說明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不錯。這樣ESRI.ArcIMS.Server.dll就加入了項目中。
??
??? 第二步,建立到ArcIMS應用服務器的連接。
using?ESRI.ArcIMS.Server
……
ServerConnection?connection?=?new?ServerConnection();
connection.Host = "localhost";
connection.AppServerPort?=?5300;
connection.Scheme?=?Scheme.TCP;
??? 如果需要建立一個HTTP連接,端口為80,可以將以上語句改為
connection.Scheme?=?Scheme.HTTP;?
connection.Host?=?"http://www.yourdomain.com";
connection.URIPort?=?80;
??? 第三步,發送一個ArcXML請求。在.NET Link中發送ArcXML請求,其實質就是對ArcXML文件的一種拼裝。
??
//?獲取默認的地圖服務
connection.ServiceName?=?"ServerSample";
//?建立一個?XML?String,即?axl
string?sAXLText;
//?在?sAXLText?中寫入定制的?axl?文件
sAXLText?=?"<?xml?version=\"1.0\"?encoding=\"UTF-8\"?><ARCXML?version=\"1.1\">";
sAXLText?=?sAXLText?+?"<REQUEST><GET_IMAGE><PROPERTIES>";
sAXLText?=?sAXLText?+?"<IMAGESIZE?width=\"300\"?height=\"250\"/>";
sAXLText?=?sAXLText?+?"<ENVELOPE?minx=\"-132.0\"?miny=\"25.0\"?maxx=\"-57.0\"?maxy=\"50.0\"?/>";
sAXLText?=?sAXLText?+?"<LEGEND?display=\"false\"?/>";
sAXLText?=?sAXLText?+?"</PROPERTIES></GET_IMAGE></REQUEST></ARCXML>";
string?response?=?conArcIMS.Send(sAXLText);
??? 最后,需要處理ArcXML響應。
System.Xml.XmlDocument?axlResponse?=?new?System.Xml.XmlDocument();
axlResponse.LoadXml(response);?
if?(axlResponse.GetElementsByTagName("OUTPUT").Count?==?1)
{?
????//?從?ArcIMS?應用服務器響應中獲取?"OUTPUT"?XmlNode?節點的集合,并且節點只有一個
????System.Xml.XmlNodeList?nodeOutput?=?axlResponse.GetElementsByTagName("OUTPUT");
????//?獲取這個節點的?url?屬性值
????imageURL?=?nodeOutput[0].Attributes["url"].Value;
}
??? 最后獲得的imageURL就是之前客戶端用戶發送請求需要服務器返回的圖片地址,用戶每次對地圖操作后看到的結果,其本質就是一張張圖片。
??? 現在思路比較清晰了,ArcIMS地圖服務發布后,其展現的內容主要是由開發中所定制的ArcXML文件的內容所決定,開發人員需要面對大量ArcXML中的子元素及其屬性設置,對于面向對象的開發而言顯然是笨了一些,但從原理上來說,還是比較簡單的,關鍵就是要看開發人員對ArcXML文檔的熟悉程度了。
??
??? 使用.NET Link進行ArcIMS二次開發的過程中,對ArcXML的子元素和屬性進行操縱與設置不是一件令人愉快的事,但其中真正的困難還要數客戶端大量javascript腳本的應用和數據傳遞,有機會拿一兩個簡單例子討論一下。
??? 前幾天馬維峰寫了一篇關于ArcIMS文章——《淺析ArcIMS》,主要分析了ArcIMS的基本體系結構和幾種二次開發模式的簡單對比,比筆者之前的《ArcIMS體系結構》分析的透徹許多。
??? ArcIMS二次開發,關注最多的無非是它的連接器(connector)和ArcXML。在這些連接器中,Servlet Connector通過純粹的ArcXML文件來傳輸請求和響應,ColdFusion Connector在其自身的運行環境中使用自定義tags來產生ArcXML請求和響應,Java Connector和ActiveX Connector比較類似,通過一組API(Java Connector還有標簽庫)來產生ArcXML請求和響應,它們是面向對象的開發方式,比較符合一般程序員的思維習慣。.NET Link比較特殊,最初我認為它和Java Connector、ActiveX Connector一樣,通過一系列API來定義、生成ArcXML文件中的節點與屬性,但事實上并非如此,簡單來說,它僅僅是對XML文件的一種搭配與組裝,使用.NET Framework中對XML文件的操縱方式拼裝出所需的ArcXML請求,并接受ArcIMS應用服務器的響應,其參考手冊中只有服務連接和AxlRequest相關的幾個類的說明,也難怪ESRI為什么要給它要取名為.NET Link,而不是.NET Connector。
??? 離ArcGIS 9.2正式發布已經沒有多長時間,.NET Link能否得到改進至少像它的前輩ArctiveX Connector一樣還不清楚。.NET Link的這種開發方式使得開發人員需要更多的關注ArcXML_reference,下面將簡單說明.NET Link的使用方法。
??? 首先,需要將.NET Link的程序集引用到開發環境中,我使用的是Visual Studio 2005,需要說明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不錯。這樣ESRI.ArcIMS.Server.dll就加入了項目中。
??
??? 第二步,建立到ArcIMS應用服務器的連接。






??? 如果需要建立一個HTTP連接,端口為80,可以將以上語句改為



??? 第三步,發送一個ArcXML請求。在.NET Link中發送ArcXML請求,其實質就是對ArcXML文件的一種拼裝。
??












??? 最后,需要處理ArcXML響應。









??? 最后獲得的imageURL就是之前客戶端用戶發送請求需要服務器返回的圖片地址,用戶每次對地圖操作后看到的結果,其本質就是一張張圖片。
??? 現在思路比較清晰了,ArcIMS地圖服務發布后,其展現的內容主要是由開發中所定制的ArcXML文件的內容所決定,開發人員需要面對大量ArcXML中的子元素及其屬性設置,對于面向對象的開發而言顯然是笨了一些,但從原理上來說,還是比較簡單的,關鍵就是要看開發人員對ArcXML文檔的熟悉程度了。
??
??? 使用.NET Link進行ArcIMS二次開發的過程中,對ArcXML的子元素和屬性進行操縱與設置不是一件令人愉快的事,但其中真正的困難還要數客戶端大量javascript腳本的應用和數據傳遞,有機會拿一兩個簡單例子討論一下。
posted on 2006-07-30 21:16 Flyingis 閱讀(6366) 評論(70) 編輯 收藏 所屬分類: ArcIMS