国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

在IE中托管.NET Windows Forms

2019-11-17 04:42:55
字體:
供稿:網(wǎng)友

  假如曾經(jīng)使用java開發(fā)過Web應(yīng)用程序,你一定會(huì)對(duì)Java applets比較熟悉,這是一種基本上在瀏覽器中運(yùn)行的小型程序。當(dāng)瀏覽器加載包含有Java applets標(biāo)志的Html代碼時(shí),Java applets就會(huì)執(zhí)行,網(wǎng)頁中的Windows Forms控件的運(yùn)行方式與Java applets相似。
我們可以使用由Windows Forms技術(shù)提供的豐富的類開發(fā)Windows Forms控件,然后在網(wǎng)頁中部署這些控件,當(dāng)瀏覽器加載這些網(wǎng)頁時(shí),就會(huì)執(zhí)行包含在Windows Forms控件中的代碼。

  .NET的偉大之處之一是它提供的與IE的無縫集成能力。例如,我們甚至能夠在用戶不知道的情況下從IE中激活一個(gè)Windows Forms控件。盡管利用了由.NET CLR提供的Code access Security的所有功能,但這是在無需進(jìn)行注冊(cè)的情況下完成的。

  當(dāng)開發(fā)Windows Forms控件時(shí),我們就通過繼續(xù)的方式擁有了Windows Forms類所提供的所有功能。例如,我們可以使用Windows Forms控件驗(yàn)證技術(shù)對(duì)用戶輸入的數(shù)據(jù)進(jìn)行廣泛的驗(yàn)證,同樣地,我們可以從窗體控件中調(diào)用遠(yuǎn)程Web服務(wù)。通過使用所有這些技術(shù),我們就能夠使用.NET平臺(tái)開發(fā)豐富、功能強(qiáng)大的應(yīng)用程序。

  實(shí)現(xiàn)

  在這一部分,我們將學(xué)習(xí)如何創(chuàng)建簡(jiǎn)單的Windows Forms控件并將它托管在IE中。下面是激活I(lǐng)E中Windows Forms控件的5個(gè)步驟:

  ·創(chuàng)建Windows Forms控件。

  ·創(chuàng)建包含標(biāo)識(shí)Windows Forms控件的對(duì)象標(biāo)志的HTML文檔。

  ·配置正確激活控件所需要的虛擬目錄。

  ·配置代碼訪問權(quán)限。

  ·運(yùn)行該控件。

  下面我們就來具體地學(xué)習(xí)上面的每一個(gè)步驟。

  創(chuàng)建Windows Forms控件

  在這一步驟中,我們將創(chuàng)建一個(gè)簡(jiǎn)單的Windows Forms控件,它向用戶顯示“Hello World”信息。如政略所示,我們將首先創(chuàng)建一個(gè)名為HelloWorldControl的新Visual C# Windows Control Library項(xiàng)目。

在IE中托管.NET Windows Forms(圖一)

  一旦創(chuàng)建項(xiàng)目后,我們將把缺省的用戶控件更名為HelloWorldCtl。我們將在用戶控件上添加一個(gè)名為lblMessage的標(biāo)簽控件和一個(gè)名為BTnClick的按鈕。當(dāng)用戶點(diǎn)擊點(diǎn)擊按鈕時(shí),程序就會(huì)執(zhí)行下面的代碼,向用戶顯示一個(gè)簡(jiǎn)單的信息:

PRivate void btnClick_Click(object sender, System.EventArgs e)
{
lblDisplayMessage.Text = "Hello World";
}
  既然已經(jīng)創(chuàng)建了控件,下面我們來編譯該項(xiàng)目,并創(chuàng)建可執(zhí)行代碼。
 創(chuàng)建HTML網(wǎng)頁

  在這一步驟中,我們將創(chuàng)建一個(gè)HTML文檔,并在其中插入用來激活Windows Forms控件的對(duì)象標(biāo)志。HTML網(wǎng)頁如下:

<html>
<body>
<p>Hello World Control

</body>
<o(jì)bject id="HelloWorldControl1"
classid="http:HelloWorldControl.dll#HelloWorldControl.HelloWorldCtl"
height="500" width="500" VIEWASTEXT>
</object>



</html>
  在對(duì)象標(biāo)志的classid屬性中,我們將路徑指定為控件庫組合體和控件的全名,控件的全名包括名字空間和控件類名字。從上面的代碼中可以看到,組合體和控件全名之間用#號(hào)隔開,這二個(gè)參數(shù)構(gòu)成了識(shí)別該控件的唯一控件標(biāo)識(shí)符。由于是唯一地由名字HelloWorldControl1標(biāo)識(shí)的,我們還可以針對(duì)該控件編寫客戶端腳本代碼。

  配置虛擬目錄

  創(chuàng)建HTML代碼后,我們就可以創(chuàng)建一個(gè)名為HelloWorldControlHost的新虛擬目錄,并在其中添加控件(HelloWorldControl.dll)和HTML文檔(HelloWorld.htm)。除了配置虛擬目錄外,將虛擬目錄的執(zhí)行權(quán)限設(shè)置為Scripts也是非常重要的。假如將其執(zhí)行權(quán)限設(shè)置為Scripts & Executables,控件就不會(huì)被正確地激活。通過打開虛擬目錄的Properties窗口(下圖),我們可以驗(yàn)證虛擬目錄的權(quán)限。

在IE中托管.NET Windows Forms(圖二)

  配置代碼訪問權(quán)限

  假如控件在企業(yè)內(nèi)部網(wǎng)上,它公正確地執(zhí)行,但假如要運(yùn)行來自互聯(lián)網(wǎng)網(wǎng)站上的控件,就需要對(duì)IE進(jìn)行配置或修改安全策略,使它能夠運(yùn)行。通過將托管網(wǎng)頁看成是受信任區(qū)段的一部分,就能夠做到這一點(diǎn)。為了將你的站點(diǎn)設(shè)置為受信任區(qū)段的一部分,我們可以在IE中通過選擇“工具”->“選項(xiàng)”->“安全”->“受信任的站點(diǎn)”,然后將你的站點(diǎn)添加到列表中,再點(diǎn)擊“OK”按鈕。這樣下次再瀏覽到該網(wǎng)頁時(shí),控件就會(huì)得到正確的執(zhí)行,因?yàn)橐呀?jīng)設(shè)置了互聯(lián)網(wǎng)許可。

  運(yùn)行控件

  要運(yùn)行控件,只要在瀏覽器中瀏覽托管該控件的HTML網(wǎng)頁即可。在顯示的HTML網(wǎng)頁中,假如點(diǎn)擊“Click Here”命令按鈕,控件就會(huì)如下圖所示顯示“Hello World”的消息。

在IE中托管.NET Windows Forms(圖三)

  在這個(gè)例子中,我們主要演習(xí)了如何創(chuàng)建簡(jiǎn)單的Windows Forms控件,并在IE中托管它。在下一部分,我們將學(xué)習(xí)如何使用Windows Forms控件從客戶機(jī)中直接訪問Web服務(wù)。 從Windows Forms控件中訪問Web服務(wù)

  Windows Forms控件的主要優(yōu)點(diǎn)是它能夠使我們?cè)诳蛻魴C(jī)上實(shí)現(xiàn)豐富的用戶體驗(yàn)。例如,我們能夠直接從客戶機(jī)上訪問Web服務(wù),然后甚至在無需刷新網(wǎng)頁的情況下向用戶顯示結(jié)果。為了演示這一點(diǎn),我們將首先創(chuàng)建一個(gè)Web服務(wù),然后從Windows Forms控件中調(diào)用該Web服務(wù)。

  創(chuàng)建Web服務(wù)

  首先,如圖所示,我們將創(chuàng)建一個(gè)名為AuthorsWebService的Visual C# asp.net Web服務(wù)。

在IE中托管.NET Windows Forms(圖四)


  Web服務(wù)創(chuàng)建后,我們就能夠?qū)eb服務(wù)類的名字修改為Authorsservice,然后在AuthorsService類中添加一個(gè)名為GetAuthors的新方法。GetAuthors方法如下所示:

[WebMethod]
public DataSet GetAuthors()
{
//從配置文件中獲得連接串
string connString = System.Configuration.ConfigurationSettings.AppSettings["connectionString"];
SqlConnection sqlConn = new SqlConnection(connString);
DataSet dstAuthors = new DataSet("Authors");
SqlDataAdapter adapter = new SqlDataAdapter("Select * from Authors",sqlConn);
//用查詢結(jié)果填寫Dataset
adapter.Fill(dstAuthors,"Author");
//關(guān)閉和處理被打開的數(shù)據(jù)庫連接
sqlConn.Close();
sqlConn.Dispose();
//向調(diào)用者返回Authors Dataset
return dstAuthors;
}
  GetAuthors方法的代碼非常簡(jiǎn)單,我們首先從web.config文件中獲得連接字符串,它被存儲(chǔ)在web.config文件的appSettings小節(jié)中。

<appSettings>
<add key="connectionString"
value="server=localhost;uid=sa;pwd=thiru;database=Pubs">
</add>
</appSettings>
  然后我們使用連接字符串作為一個(gè)參數(shù)創(chuàng)建SqlConnection對(duì)象的一個(gè)實(shí)例,再以執(zhí)行的查詢和SqlConnection對(duì)象為參數(shù)創(chuàng)建一個(gè)SqlDataAdapter對(duì)象的實(shí)例,然后,我們調(diào)用SqlDataAdapter對(duì)象的Fill方法執(zhí)行查詢,并用查詢的填寫DataSet。最后我們釋放所有資源,并將DataSet返回給Web服務(wù)的調(diào)用者。在創(chuàng)建Web服務(wù)后,我們就可以著手開始創(chuàng)建Web服務(wù)的客戶端應(yīng)用程序了。

  為Web服務(wù)客戶端的Windows Forms控件的創(chuàng)建

  由于希望從Windows Forms控件中調(diào)用Web服務(wù),我們將創(chuàng)建一個(gè)名為AuthorsWebServiceClientControl的新Visual C# Control Library項(xiàng)目。

在IE中托管.NET Windows Forms(圖五)

  創(chuàng)建項(xiàng)目后,我們可以將缺省的用戶控件改名為AuthorsControl。我們可以在用戶的控件中添加名為gridAuthors的DataGrid和名為btnClick的命令按鈕。在命令按鈕的Click事件中,我們將編寫調(diào)用Web服務(wù)的代碼。在此之前,我們可以在Visual Studio .NET中使用“Add Web Reference”選項(xiàng)添加該Web服務(wù)的地址。在“Add Web Reference”對(duì)話框中,我們可以輸入Web服務(wù)的位置并按回車鍵,然后點(diǎn)擊“Add Reference”按鈕添加Web服務(wù)的地址。這樣,我們就為Authors Web服務(wù)創(chuàng)建了一個(gè)代理。

在IE中托管.NET Windows Forms(圖六)

  創(chuàng)建代理后,我們就可以開始添加調(diào)用Web服務(wù)的代碼了,這部分代碼添加在此前添加的命令按鈕中的click事件中。

private void btnClick_Click(object sender, System.EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
AuthorsWebServiceProxy.AuthorsService authorsSvc = new
AuthorsWebServiceProxy.AuthorsService();
gridAuthors.DataSource = authorsSvc.GetAuthors();
this.Cursor = Cursors.Default;
}
  在上面的幾行代碼中,我們創(chuàng)建了Web服務(wù)代理類的一個(gè)實(shí)例,然后調(diào)用了GetAuthors方法,將從Web服務(wù)返回的DataSet賦予DataGrid控件的DataSource屬性。現(xiàn)在,就可以對(duì)項(xiàng)目進(jìn)行編譯,創(chuàng)建組合體了。
 HTML網(wǎng)頁和虛擬目錄的創(chuàng)建

  在這一步驟中,我們將創(chuàng)建托管AuthorsWebServiceClientControl控件的HTML網(wǎng)頁,HTML網(wǎng)頁的代碼如下所示:

<html>
<body>
<p>
Authors Display Control

</body>
<o(jì)bject id="AuthorsControl1"
classid="http:AuthorsWebServiceClientControl.dll#AuthorsWebServiceClientControl.AuthorsControl"
height="500" width="500" VIEWASTEXT>
</object>



</html>
  在創(chuàng)建HTML網(wǎng)頁后,我們還需要?jiǎng)?chuàng)建一個(gè)用來托管HTML網(wǎng)頁和控件的虛擬目錄。創(chuàng)建虛擬目錄后,我們就可以將HTML網(wǎng)頁和控件拷貝到被映射到虛擬目錄的物理目錄中。現(xiàn)在,我們就可以通過瀏覽HTML網(wǎng)頁對(duì)控件進(jìn)行測(cè)試了,在HTML網(wǎng)頁中,我們會(huì)看到是窗體控件一部分的命令控件。假如點(diǎn)擊命令按鈕,它就會(huì)從客戶機(jī)上的瀏覽器調(diào)用Web服務(wù),并在DataGrid中顯示W(wǎng)eb服務(wù)的結(jié)果。HTML網(wǎng)頁的輸出如下所示:

在IE中托管.NET Windows Forms(圖七)

  調(diào)試Windows Forms控件

  為了調(diào)試該控件,我們需要完成下面的步驟:

  ·打開瀏覽器,請(qǐng)求瀏覽上面創(chuàng)建的HTML網(wǎng)頁。

  ·打開Visual Studio.NET,從菜單中選擇“工具”->“調(diào)試進(jìn)程”,顯示下面的對(duì)話框:

在IE中托管.NET Windows Forms(圖八)

  ·在進(jìn)程對(duì)話框,選擇IEXPLORE.EXE,點(diǎn)擊“附加”按鈕。點(diǎn)擊“附加”按鈕時(shí),會(huì)出現(xiàn)下圖所示的對(duì)話框,它會(huì)提醒你選擇要調(diào)試的程序類型。在該對(duì)話框中,確保選擇了清單中的“公共語言運(yùn)行庫”選項(xiàng)。

在IE中托管.NET Windows Forms(圖九)

  ·點(diǎn)擊上面對(duì)話框中的“OK”按鈕將使我們重新返回到進(jìn)程對(duì)話框,這次,我們只需點(diǎn)擊“關(guān)閉”按鈕即可。

在IE中托管.NET Windows Forms(圖十)

  ·從“文件”->“打開”->“文件”菜單中打開用戶控件文件AuthorsWebServiceClientControl.cs,并在命令按鈕的Click事件中設(shè)置斷點(diǎn)。

  ·返回到瀏覽器并點(diǎn)擊命令按鈕,程序會(huì)自動(dòng)運(yùn)行到剛才在控件中設(shè)置的斷點(diǎn)處,我們就可以使用Visual Studio .NET的所有功能調(diào)試代碼。

在IE中托管.NET Windows Forms(圖十)
代碼訪問權(quán)限和Windows Forms控件

  象我們?cè)谏厦嬗懻摰哪菢樱?dāng)控件在IE中執(zhí)行時(shí),它會(huì)利用了.NET運(yùn)行時(shí)間庫提供的代碼訪問權(quán)限。為了理解在IE中運(yùn)行的Windows Forms控件是如何與由.NET運(yùn)行時(shí)間庫提供的代碼訪問安全機(jī)制協(xié)調(diào)運(yùn)行的,我們?cè)贏uthors窗體控件中添加幾行代碼,并創(chuàng)建新的事件日志源。經(jīng)過修改后,控件的load事件如下所示:

private void AuthorsControl_Load(object sender, System.EventArgs e)
{
if (!EventLog.SourceExists("TestSource"))
EventLog.CreateEventSource("TestSource", "TestLog");
else
{
EventLog.DeleteEventSource("TestSource");
EventLog.CreateEventSource("TestSource", "TestLog");
}
}
}
  在上面的幾行代碼中,我們檢查名為TestSource的EventLog源是否存在,假如不存在,則創(chuàng)建一個(gè),否則我們刪除現(xiàn)有的事件源,再創(chuàng)建一個(gè)新的事件源。也許你已經(jīng)想到,執(zhí)行這樣的操作需要更高的權(quán)限,從互聯(lián)網(wǎng)上下載的控件不應(yīng)當(dāng)具有執(zhí)行這種操作的權(quán)限。為了確保這一點(diǎn),我們將控件的輸出拷貝到虛擬目錄中。在完成這一操作后,假如用瀏覽器瀏覽托管有控件的HTML網(wǎng)頁,我們會(huì)看到下面的對(duì)話框:

在IE中托管.NET Windows Forms(圖十二)

  上面的對(duì)話框清楚地表明,控件中的代碼受到了.NET時(shí)間運(yùn)行庫中代碼訪問安全機(jī)制的限制。

  小結(jié)

  在在IE中使用Windows Forms前,我們需要注重它的優(yōu)點(diǎn)和限制。它的主要優(yōu)點(diǎn)有:

  ·通過Web實(shí)現(xiàn)動(dòng)態(tài)豐富用戶體驗(yàn)的能力。

  ·客戶端編譯代碼的自動(dòng)緩沖。

  ·與.NET代碼訪問安全機(jī)制的無縫集成,使我們能夠從客戶端利用.NET安全模型

  ·勝過Java applets的性能。

  限制包括:

  ·要求客戶端安裝有Windows操作系統(tǒng)


  ·只有IE 6.0提供對(duì)這類托管方式的支持

  ·要求客戶機(jī)上安裝.NET運(yùn)行時(shí)間庫

  ·要求服務(wù)器端至少安裝windows 2000、IIS 5.0或者以上版本軟件。

  由于會(huì)受到上面的種種限制,檢測(cè)客戶機(jī)是否具有這種能力是必要的。例如,由于在IE中托管窗體控件需要在客戶機(jī)上安裝有.NET運(yùn)行時(shí)間庫,我們就可以編寫檢查客戶機(jī)是否安裝有.NET運(yùn)行時(shí)間庫的代碼。我們可以通過檢查Request.Browser.ClrVersion屬性的值來完成這一操作,假如安裝了,則會(huì)返回版本號(hào),否則會(huì)返回0.0。

  結(jié)論

  在本篇文章中,我們學(xué)習(xí)了如何在IE中托管Windows Forms控件以及如何調(diào)試控件,我們還學(xué)習(xí)了如何利用.NET代碼訪問安全機(jī)制配置在瀏覽器中運(yùn)行時(shí)控件能夠執(zhí)行的操作。
盡管這一技術(shù)要求特定的平臺(tái),但它仍然不失為一種有前途的技術(shù),尤其是考慮到.NET Framework將成為未來版本的Windows的有機(jī)組成部分。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广元市| 阳城县| 内江市| 天祝| 京山县| 瓮安县| 信宜市| 元氏县| 南雄市| 凤城市| 宁远县| 定西市| 东丰县| 汽车| 霍城县| 阳山县| 工布江达县| 察雅县| 红原县| 敦煌市| 桂东县| 灵川县| 宝兴县| 怀柔区| 广灵县| 四平市| 石景山区| 望奎县| 神池县| 庄河市| 岳阳市| 清原| 禹州市| 治多县| 应用必备| 滦南县| 德昌县| 阿勒泰市| 龙州县| 波密县| 莱芜市|