PDA

View Full Version : حرفه ای: لود xap فایل درون پروژه



vs2008
چهارشنبه 09 اسفند 1391, 13:09 عصر
با سلام
چطور میشه یک پروژه silverlight خارج از پروژه اصلی را که از طریق دومین سرویس دیتا لود میکند را درون پروژه اصلی فقط با کمک xap فایل آن لود کرد؟

من تا اینجا پیش رفتم که یک xap فایل خارجی را که تنها یک lable نمایش میدهد را لود کنم.اما با دومین سرویس و لود دیتا نمایش نمی دهد. :گریه:

http://www.codeproject.com/Articles/267751/How-to-Visit-UserControl-of-External-XAP-File-in-S

hakim22
شنبه 12 اسفند 1391, 09:57 صبح
اگر فایل xap در دامنه ی اصلی قرار نداشته باشد برای دسترسی به اطلاعات آن دامنه باید از Cross-Domain-Policy عبور کند. برای اینکار باید فایل تنظیمات clientaccesspolicy.xml یا crossdomainpolicy.xmlبسازید و آن را در شاخه ی وب سایت مربوطه در وب سرور قرار دهید و همچین IIS را هم برای xap تنظیم کنید (MIME Type آن را اضافه کنید)

دلیل این مسئله پیشگیری های امنیتی است. به این دلیل که سیلورلایت ابتدا در رایانه ی کاربر کپی میشود و ارتباطش با سرور کاملا قطع است. در آخرین بخش از لینکی که خودتان معرفی کرده اید (قبل از conclusion) این مطلب ذکر شده است.

نمونه ی فایلهای زیادی در مورد clientaccesspolicy خواهید یافت ولی کد مهم آن به صورت زیر است :


<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>


علامت * مشخص می کند که اجازه cross کردن به هم HTTPبه فایل xap داده شود. شما می توانید تنظیمات آن را روی آدرس خاصی قرار دهید یا از RegExp استفاده کنید و...

برای MIME:
http://www.iis.net/learn/web-hosting/web-server-for-shared-hosting/configuring-iis-for-silverlight-applications

vs2008
شنبه 12 اسفند 1391, 14:18 عصر
ممنون
اما این کار رو هم کردم جواب نداد!
شاید روش لود کردن من اشتباه است :

private Assembly LoadAssemblyFromXap(string relativeUri,
Stream xapPackageStream)
{
try
{

StreamResourceInfo xapPackageSri
= new StreamResourceInfo(xapPackageStream, null);
StreamResourceInfo assemblySri
= Application.GetResourceStream(xapPackageSri,
new Uri(relativeUri, UriKind.Relative));
AssemblyPart assemblyPart = new AssemblyPart();

return assemblyPart.Load(assemblySri.Stream);

}
catch (Exception)
{

throw;
}
}

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
//
// Assembly assembly = initXap(e.Result);
try
{
//Assembly assembly = initXap(e.Result);
Assembly assembly = LoadAssemblyFromXap("MyApp.dll", e.Result);
UIElement element = assembly.CreateInstance("MyApp.MainPage") as UIElement;
this.sp.Children.Add(element);
}
catch (Exception)
{

throw;
}
}

hakim22
شنبه 12 اسفند 1391, 18:16 عصر
http://www.codeproject.com/Articles/111334/Download-XAP-Packages-on-Demand-in-Silverlight

vs2008
دوشنبه 14 اسفند 1391, 08:39 صبح
ممکنه یه پروژه کوچک نمونه برای من بسازید که از xap دیتا بیاره؟هر کاری میکنم نمیشه.گیر افتادم!