在CLR执行托管代码的第一行之前,它会创建三个应用程序域系统域,共享域,默认Appdomain。 可以使用AppDomain.CreateDomain方法在托管代码中创建其他Appdomain域,也可以使用ICORRuntimeHost接口从非托管托管代码创建。
意味着单个应用程序中可以有多个appdomain。 我的问题是。
问题1> Silverlight解决方案由两个项目Silverlight项目和Web项目组成,这意味着该解决方案将有两个应用程序。在Silverlight中出现跨域策略。让我知道我是对还是错。
问题2>因为silverlight被视为窗口应用程序,所以在客户端或服务器上创建了用于silverlight应用程序的appdomain。
答案 0 :(得分:2)
问题1:你是对的,但出于错误的原因。 是两个应用程序域,但它们存在于不同的进程中,实际上存在于不同的机器上。你混淆了两个完全不同的概念,两个都碰巧使用“域”这个词。
.NET使用AppDomains作为一种机制,允许单个操作系统进程托管多个应用程序实例。 AppDomains在应用程序之间创建边界,以便不同的应用程序不能只读取彼此的数据并直接调用彼此的代码。需要对数据传输和方法调用(如有必要)进行编组。
“跨域策略”中的“域”是指Web服务器的DNS域和主机名。想要向可能托管在不同服务器上的Silverlight应用程序提供数据的Web服务器需要这样的策略。
问题2: Silverlight在浏览器使用的操作系统进程中在客户端上创建自己的AppDomain版本。
答案 1 :(得分:1)
为silverlight客户端应用程序1创建的四个域> SystemDomain 2> SharedDomain 3> DefaultDomain 4> SilverlightAppDomain和所有四个Domain Created On客户端(Silverlight应用程序运行的地方)。 SystemDomain和Shared域创建了persystem,其他Defaultbrmain和SilverlightAppDomain创建了perbrowser。
其他三个为silverlight Web项目1创建的域> SystemDomain 2> SharedDomain 3> DefaultDomain和所有三个在服务器上创建的域。
为silverlight Client创建的域名如下。
系统域:77c59ef8
LowFrequencyHeap:77c5a204
HighFrequencyHeap:77c5a250
StubHeap:77c5a29c
阶段:开放
姓名:无
共享域名:77c5a6d8
LowFrequencyHeap:77c5a204
HighFrequencyHeap:77c5a250
StubHeap:77c5a29c
阶段:开放
姓名:无
汇编:05750b08 [C:\ Program Files \ Microsoft Silverlight \ 4.0.60531.0 \ System.Net.dll]
(还包括其他所需的Dll(模块))
域名1:05769018
LowFrequencyHeap:0576938c
HighFrequencyHeap:057693d8
StubHeap:05769424
阶段:开放
SecurityDescriptor:03352010
名称:DefaultDomain
汇编:05751b80 [C:\ Program Files \ Microsoft Silverlight \ 4.0.60531.0 \ mscorlib.dll]
ClassLoader:033392e0
SecurityDescriptor:03313f00
域名2:0587d618
LowFrequencyHeap:0587d98c
HighFrequencyHeap:0587d9d8
StubHeap:0587da24
阶段:开放
SecurityDescriptor:03352190
名称:Silverlight AppDomain
(还包括其他所需的Dll(模块))