ArcIMS 連接器--.NET Link 使用方法
??? 作者:Flyingis????
??? 前幾天馬維峰寫了一篇關(guān)于ArcIMS文章——《淺析ArcIMS》,主要分析了ArcIMS的基本體系結(jié)構(gòu)和幾種二次開發(fā)模式的簡單對比,比筆者之前的《ArcIMS體系結(jié)構(gòu)》分析的透徹許多。
??? ArcIMS二次開發(fā),關(guān)注最多的無非是它的連接器(connector)和ArcXML。在這些連接器中,Servlet Connector通過純粹的ArcXML文件來傳輸請求和響應(yīng),ColdFusion Connector在其自身的運行環(huán)境中使用自定義tags來產(chǎn)生ArcXML請求和響應(yīng),Java Connector和ActiveX Connector比較類似,通過一組API(Java Connector還有標(biāo)簽庫)來產(chǎn)生ArcXML請求和響應(yīng),它們是面向?qū)ο蟮拈_發(fā)方式,比較符合一般程序員的思維習(xí)慣。.NET Link比較特殊,最初我認(rèn)為它和Java Connector、ActiveX Connector一樣,通過一系列API來定義、生成ArcXML文件中的節(jié)點與屬性,但事實上并非如此,簡單來說,它僅僅是對XML文件的一種搭配與組裝,使用.NET Framework中對XML文件的操縱方式拼裝出所需的ArcXML請求,并接受ArcIMS應(yīng)用服務(wù)器的響應(yīng),其參考手冊中只有服務(wù)連接和AxlRequest相關(guān)的幾個類的說明,也難怪ESRI為什么要給它要取名為.NET Link,而不是.NET Connector。
??? 離ArcGIS 9.2正式發(fā)布已經(jīng)沒有多長時間,.NET Link能否得到改進(jìn)至少像它的前輩ArctiveX Connector一樣還不清楚。.NET Link的這種開發(fā)方式使得開發(fā)人員需要更多的關(guān)注ArcXML_reference,下面將簡單說明.NET Link的使用方法。
??? 首先,需要將.NET Link的程序集引用到開發(fā)環(huán)境中,我使用的是Visual Studio 2005,需要說明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不錯。這樣ESRI.ArcIMS.Server.dll就加入了項目中。
??
??? 第二步,建立到ArcIMS應(yīng)用服務(wù)器的連接。
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;
??? 第三步,發(fā)送一個ArcXML請求。在.NET Link中發(fā)送ArcXML請求,其實質(zhì)就是對ArcXML文件的一種拼裝。
??
//?獲取默認(rèn)的地圖服務(wù)
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響應(yīng)。
System.Xml.XmlDocument?axlResponse?=?new?System.Xml.XmlDocument();
axlResponse.LoadXml(response);?
if?(axlResponse.GetElementsByTagName("OUTPUT").Count?==?1)
{?
????//?從?ArcIMS?應(yīng)用服務(wù)器響應(yīng)中獲取?"OUTPUT"?XmlNode?節(jié)點的集合,并且節(jié)點只有一個
????System.Xml.XmlNodeList?nodeOutput?=?axlResponse.GetElementsByTagName("OUTPUT");
????//?獲取這個節(jié)點的?url?屬性值
????imageURL?=?nodeOutput[0].Attributes["url"].Value;
}
??? 最后獲得的imageURL就是之前客戶端用戶發(fā)送請求需要服務(wù)器返回的圖片地址,用戶每次對地圖操作后看到的結(jié)果,其本質(zhì)就是一張張圖片。
??? 現(xiàn)在思路比較清晰了,ArcIMS地圖服務(wù)發(fā)布后,其展現(xiàn)的內(nèi)容主要是由開發(fā)中所定制的ArcXML文件的內(nèi)容所決定,開發(fā)人員需要面對大量ArcXML中的子元素及其屬性設(shè)置,對于面向?qū)ο蟮拈_發(fā)而言顯然是笨了一些,但從原理上來說,還是比較簡單的,關(guān)鍵就是要看開發(fā)人員對ArcXML文檔的熟悉程度了。
??
??? 使用.NET Link進(jìn)行ArcIMS二次開發(fā)的過程中,對ArcXML的子元素和屬性進(jìn)行操縱與設(shè)置不是一件令人愉快的事,但其中真正的困難還要數(shù)客戶端大量javascript腳本的應(yīng)用和數(shù)據(jù)傳遞,有機(jī)會拿一兩個簡單例子討論一下。
??? 前幾天馬維峰寫了一篇關(guān)于ArcIMS文章——《淺析ArcIMS》,主要分析了ArcIMS的基本體系結(jié)構(gòu)和幾種二次開發(fā)模式的簡單對比,比筆者之前的《ArcIMS體系結(jié)構(gòu)》分析的透徹許多。
??? ArcIMS二次開發(fā),關(guān)注最多的無非是它的連接器(connector)和ArcXML。在這些連接器中,Servlet Connector通過純粹的ArcXML文件來傳輸請求和響應(yīng),ColdFusion Connector在其自身的運行環(huán)境中使用自定義tags來產(chǎn)生ArcXML請求和響應(yīng),Java Connector和ActiveX Connector比較類似,通過一組API(Java Connector還有標(biāo)簽庫)來產(chǎn)生ArcXML請求和響應(yīng),它們是面向?qū)ο蟮拈_發(fā)方式,比較符合一般程序員的思維習(xí)慣。.NET Link比較特殊,最初我認(rèn)為它和Java Connector、ActiveX Connector一樣,通過一系列API來定義、生成ArcXML文件中的節(jié)點與屬性,但事實上并非如此,簡單來說,它僅僅是對XML文件的一種搭配與組裝,使用.NET Framework中對XML文件的操縱方式拼裝出所需的ArcXML請求,并接受ArcIMS應(yīng)用服務(wù)器的響應(yīng),其參考手冊中只有服務(wù)連接和AxlRequest相關(guān)的幾個類的說明,也難怪ESRI為什么要給它要取名為.NET Link,而不是.NET Connector。
??? 離ArcGIS 9.2正式發(fā)布已經(jīng)沒有多長時間,.NET Link能否得到改進(jìn)至少像它的前輩ArctiveX Connector一樣還不清楚。.NET Link的這種開發(fā)方式使得開發(fā)人員需要更多的關(guān)注ArcXML_reference,下面將簡單說明.NET Link的使用方法。
??? 首先,需要將.NET Link的程序集引用到開發(fā)環(huán)境中,我使用的是Visual Studio 2005,需要說明的是ArcIMS 9/9.1 的.NET Link在VS2003和VS2005中都能工作的很好,兼容性不錯。這樣ESRI.ArcIMS.Server.dll就加入了項目中。
??
??? 第二步,建立到ArcIMS應(yīng)用服務(wù)器的連接。






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



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












??? 最后,需要處理ArcXML響應(yīng)。









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