開發環境:Windows7旗艦版64bit、VisualStudio2008 With SP1、ArcEngine10.0、NetFrameWork4.0、IIS7和C#開發語言。
背景:ArcEngine開發的分析功能同時在dotNet(CS)和Java(BS)中使用,在CS程序中運行正常,但是在BS運行下經常無法獲得分析數據,因此想通過寫一個WebService的方式進行解決。
因為之前一直做成CS的東西,很少接觸BS內容,完全從0寫起,因此寫起來遇到了不少問題、比較費事。
下面記錄下我寫的大體過程,希望和我一樣的新手可以用到,對於一些問題以及解決過程,將在以后進行說明。
1、新建服務
VS2008->新建->網站->Asp.Net Web 服務。
2、編寫WebService內部代碼與代碼調試
打開Service1.asmx文件
找到這一行
1: [WebService(Namespace = "http://tempuri.org/")]
把NameSpace的值改為 [WebService(Namespace = http://gisAnalysis.org/)]
其中系統自帶一個HelloWorld方法,方法之前添加[WebMethod]表示其為可以WEB調用的方法,之后用戶可以根據自己的需要編寫自己的AE代碼。
我自己編寫了一個爆管分析的調用方法:
1: [WebMethod]
2: public string BrustPipeAnalysis(double x, double y)
3、服務發布
找到IIS默認目錄(我電腦目錄為“C:\inetpub\wwwroot”)找到需要發布的服務文件夾。將該文件夾拷貝到需要發布服務的機器的IIS默認目錄下面。然后進入IIS:
通過添加網站,添加我們拷貝過來的網站即可。
點擊確定即可添加網站,添加完成后可以通過右鍵->管理網站->瀏覽(或者在最左側的瀏覽網站)進行查看。如果正常則表示網站發布成功。
如果頁面存在錯誤,可以通過進行相應的設置,可以在此修改應用程序池等。
上面是在IIS7.0的情況下進行的,對於IIS6.0版本,還需要進行權限和共享、Web共享以及添加Everyone權限設置。
可以直接在瀏覽網頁上或者在調用程序進行服務測試,發布的服務可以直接在目錄下修改其文件代碼,修改后立即生效。
4、服務調用
新建一個調用程序工程。然后添加服務引用。
點擊添加web引用按鈕,彈出添加web引用窗口。
輸入地址后點擊“前往”按鈕,可以前往到該web引用進行查看,沒有問題后輸入自己的web引用名稱點擊“添加引用”進行添加即可。
調用說明:
1: WebReference.Service myWeb =new WindowsFormsApplication.WebReference.Service();
2: myWeb.InitializeLifetimeService();
3: string strXml = myWeb.BrustPipeAnalysis(0, 0, true);
原先返回值為DataSet,因為在WebService中無法使用其為返回類型,所以將其轉化為Xml返回,返回后根據相應的方法將Xml重新轉化為所需的DataSet即可。
注意編寫WebService,傳遞參數不能使IFeatureLayer、List等對象,如果存在這些對象要進行序列化與反序列化處理。同時因為是Java調用,所以在參數設置上不能使用ref、out等外部參數等。
因為第一次接觸因此不可避免的存在一些不足,可能在上面中存在錯誤或者存在更好的處理方式,如果有什么不當的地方還請大家給指正一下,在這里先謝過了!(*^__^*) 嘻嘻……