2011-08-26 116 views
3

在CLR執行託管代碼的第一行之前,它會創建三個應用程序域系統域,共享域和默認AppDomain。 可以使用AppDomain.CreateDomain方法或使用ICORRuntimeHost接口的非託管託管代碼從託管代碼內創建其他AppDomain域。silverlight的應用程序域

意味着在單個應用程序中可以有多個應用程序域。 我的問題是。

問題1> silverlight解決方案由兩個項目silverlight項目和web項目組成,這意味着這個解決方案將有兩個appdomin。這就是在silverlight中出現跨域策略的方式。讓我知道我是對還是錯。

問題2>因爲silverlight被視爲窗口應用程序,所以Silverlight應用程序的appdomain會在客戶端或服務器上創建。

+0

你從哪裏獲得第一句話的信息? – AnthonyWJones

+0

我已經通過一個MSDN博客以及我已經測試它與sos和windbg .. 我已經發布了上述問題的答案,請看看.. –

回答

1

四域並且所有四個域中創建在客戶機(你在哪裏都Silverlight應用程序運行)。 SystemDomain和Shared域創建了persystem,其他DefaultDomain和SilverlightAppDomain創建了perbrowser。

其他地方爲silverlight創建的三個域Web項目1> SystemDomain 2> SharedDomain 3> DefaultDomain和所有三個Domain Created On服務器上。

爲silverlight客戶端創建的域名如下。

系統域:77c59ef8
LowFrequencyHeap:77c5a204
HighFrequencyHeap:77c5a250
StubHeap:77c5a29c
階段:OPEN
名稱:無

共享域:77c5a6d8
LowFrequencyHeap:77c5a204
HighFrequencyHeap: 77c5a250
StubHeap:77c5a29c
階段:OPEN
名稱:無
大會:05750b08 [C:\ Program Files文件\微軟的Silverlight \ 4.0.60531.0 \ System.Net.dll]
(其它所需的DLL(模塊)也包括在內)

域1:05769018
LowFrequencyHeap:0576938c
HighFrequencyHeap:057693d8
StubHeap:05769424
階段:OPEN
SecurityDescriptor:03352010
名稱:默認域
大會:05751b80 [C:\ Program Files文件\微軟的Silverlight \ 4.0.60531.0 \ mscorlib.dll中] 的ClassLoader:033392e0 SecurityDescriptor:03313f00

域2:0587d618
LowFrequencyHeap:0587d98c
HighFrequencyHeap:0587d9d8
StubHeap:0587da24
階段:OPEN
SecurityDescriptor:03352190
名稱:Silverlight中的AppDomain
(其他必需的Dll(模塊)也包括在內)

2

問題1:你是對的,但出於錯誤的原因。有兩個應用程序域,但它們存在於不同的進程中,實際上存在於不同的機器上。你混淆了兩個完全不同的概念,這兩個概念都碰巧使用了「域」這個詞。

.NET使用AppDomains作爲一種機制,允許單個操作系統進程託管多個應用程序實例。 AppDomains在應用程序之間創建邊界,以便不同的應用程序不僅可以讀取其他應用程序,還可以直接調用其他每個應用程序的代碼。數據傳輸和方法調用(如有必要)需要編組。

「跨域策略」中的「域」是指Web服務器的DNS域名和主機名稱。 Web服務器需要這種策略,該服務器希望將數據提供給可託管在不同服務器上的Silverlight應用程序。

問題2: Silverlight在瀏覽器使用的操作系統進程中的客戶端上創建自己的AppDomain版本。對於Silverlight客戶端應用程序1> 2 SystemDomain> SharedDomain 3>默認域4> SilverlightAppDomain創建