2014-02-27 79 views
0

我開始學習web服務,我順利地到this topic。如果你能在這裏看到的是代碼click事件創建proxy和存儲Cookie會出現:需要一些關於web服務的幫助

protected void Button1_Click(object sender, EventArgs e) 
{ 
    localhost.MyDemo MyService; 

    // try to get the proxy from Session state 
    MyService = Session["MyService"] as localhost.MyDemo; 

    if (MyService == null) 
    { 
     // create the proxy 
     MyService = new localhost.MyDemo(); 

     // create a container for the SessionID cookie 
     MyService.CookieContainer = new CookieContainer(); 

     // store it in Session for next usage 
     Session["MyService"] = MyService; 
    } 

    // call the Web Service function 
    Label1.Text += MyService.HelloWorld() + "<br />"; 
} 

我很困惑在行MyService = Session["MyService"] as localhost.MyDemo;

雖然我知道as用於鑄造,我想在這裏它做相同的,但

問題1:Sessionlocalhost.MyDemo是兩個不同的對象鑄因此如何是可能的?

問題2:as是不是在做鑄造,那麼這條線意味着什麼?

問題3:爲什麼需要施放?

問題4:什麼值Session["MyService"]將有?

請幫我理解這一點。

+0

本文將幫助您理解:http://msdn.microsoft.com/en-us/library/ms173105.aspx – ohlmar

+1

您已經在ASMX Web服務上找到了一箇舊教程。 ASMX是一項傳統技術,不應該用於新開發。 WCF或ASP.NET Web API應該用於Web服務客戶端和服務器的所有新開發。一個暗示:微軟已經在MSDN上退役了[ASMX Forum](http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/threads)。 –

+0

是啊@JohnSaunders。我只是想在學習'Web服務'之後'WCF'會更容易。感謝您的好建議。 – SMI

回答

1
  1. 您不投Sessionlocalhost.MyDemoSession["MyService"]Session["MyService"]返回需要轉換爲目標類型的對象。在這種情況下使用[...]調用indexer
  2. as以友好的方式表演。它試圖執行演員陣容,但如果演員陣容無效,則不會投訴。如果它不能執行演員,則分配null。因此,在下一行中檢查null。
  3. 需要投射,因爲您可以將任何object存儲在會話內存中。爲了使用MyService的特定方法或屬性,您需要將由索引器返回的object轉換爲MyService的實例。
  4. Session["MyService"]將被設置爲MyService的實例。

有關HttpSessionState類(「Session」對象的類型)的詳細概述,請參見link。對於用於訪問會話內存中變量的索引器屬性,請參閱此link

1

問題1:因爲Session和localhost.MyDemo是兩個不同的對象,所以如何轉換是可能的? 會話是一個包含任何類型對象的集合。 http://msdn.microsoft.com/en-us/library/ms178581.aspx

問題2:是不是在鑄造這裏,那麼這條線意味着什麼? 這是鑄造

問題3:爲什麼需要施放? 在這種情況下,我可以看到沒有必要,因爲從未使用鑄造值,除非比較爲null。

問題4:Session [「MyService」]會有什麼值? 它看起來像是對Web服務客戶端的緩存引用。

0

問題1

Sessionlocalhost.MyDemo是不同的,但你不使用Session,你看存儲在Session["MyService"]

問題2

的對象是像但是如果對象不是特定類型,它將返回null。更多信息here

問存儲在Session["MyService"] 3個

對象都是對象,如在需要所以它的強類型。

問題4

Session["MyService"]會有任何物體放在那裏 - 在這種情況下

MyService = new localhost.MyDemo(); 
Session["MyService"] = MyService; 

個人而言,我真的不喜歡你展示的代碼 - 我看不出有任何理由在會話中存儲WS引用(爲什麼不在某處使用變量)。 MyService是一個局部變量,因此應該以小寫m開頭,並且似乎並不需要cookie容器(通常只用於需要認證和保持會話的WebServices)。