خطأ أمان WebClient عند الوصول إلى World of Warcraft Armory
-
04-10-2019 - |
سؤال
أحاول تجميع حل لمشكلة ما. في الأساس ، أستخدم Silverlight 4 مع C# 4.0 للوصول إلى عالم World of Warcraft Armory. إذا كان أي شخص قد فعل هذا - من فضلك أوه ، يرجى تقديم رمز العمل .NET 4.0.
الرمز الذي أحاول تشغيله هو (E.Error يحتوي على خطأ Securtiy):
private void button10_Click(object sender, RoutedEventArgs e)
{
string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented";
WebClient wc = new WebClient();
// HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS)
//wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(url));
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
string result = e.Result;
XDocument ArmouryXML = XDocument.Parse(result);
ShowGuildies(ArmouryXML);
}
else
{
MessageBox.Show("Something is complaining about security but not sure what!");
}
}
ملحوظات:
- ج# 4.0
- Armory هو ملف XML - لكنني أعتقد أنه يعود إلى HTML إذا لم يكن الطلب من متصفح يدعم تحويل XML. لكني لا أعتقد أنني أتحمل هذا الحد.
- يحتوي Armory على ملف سياسة المجال المتقاطع عليه - قد يكون هذا هو سبب الخطأ (غير متأكد!
- لقد قمت بتحميله على خادم الإنتاج
- أنا أختبرها محليًا باستخدام موقع IIS
- أنا ذاهب مجنون!
- قدمت مواقع الويب اقتراحًا بأن هذه المشكلة يمكن التغلب عليها من خلال إنشاء WebProxy - لكن ليس لدي أول فكرة عن كيفية القيام بذلك.
سيكون من الرائع أن يواجه شخص ما هذا التحدي ويظهر لنا كل ما هو ممكن. أفضل حلًا غير بروكسي أولاً ، ثم جرب وكيلًا.
تفاصيل الخطأ:
e.error = {system.security.securityexception ---> System.Security.SecurityException: خطأ أمان. في system.net.browser.browserhttpwebrequest.internalendgetResponse (iasyncresult asyncresult) في system.net.browser.browserhttpwebrequest. <> c__displayclass5.
أي المبرمجون الرئيسيين الذكيين يمكنهم حل هذا في نومهم؟
شكرا إذا كنت تستطيع المساعدة.
المحلول 3
حل - استخدم خدمة WCF لتكون بمثابة وكيل بسبب أمان النطاق المتقاطع وقيود تعديل الرأس. شكرا على كل النصائح.
نصائح أخرى
عند تشغيل تطبيق Silverlight في المتصفح ، قد يقوم تطبيق Silverlight فقط بتقديم طلبات إلى عناوين URL من نفس المجال الذي تم تثبيته من التطبيق. على سبيل المثال ، إذا تم تثبيت تطبيق Silverlight الخاص بك http://yoursite.com/yourapp.xap
, ، يمكنك فقط تقديم طلبات ويب إلى عناوين URL الأخرى http://yoursite.com/
. خياراتك هنا هي إما إنشاء برنامج نصي وكيل يطلب من Wow Armory من الخادم الخاص بك ، وضرب تطبيق Silverlight الخاص بك هذا الوكيل ، أو تشغيل Silverlight خارج المقبض وطلب الثقة الكاملة.
تحرير: بشكل عام الخيار الأفضل هو ملف سياسة المجال المتقاطع كما هو موضح هنا. للأسف ، لا يبدو أن wowarmory.com ينفذ ملف سياسة المجال المتقاطع.
كنت على المسار الصحيح ، تحتاج فقط إلى تعيين وكيل المستخدم.
private void button10_Click(object sender, RoutedEventArgs e)
{
string url = @"http://eu.wowarmory.com/guild-info.xml?r=Eonar&n=Gifted and Talented";
WebClient wc = new WebClient();
// HOW DO I ADD A USER AGENT STRING (RESPONSE MAY VARY (I.E. HTML VS XML) IF PAGE THINKS CALL IS NOT CAPABABLE OF SUPPORTING XML TRANSFORMATIONS)
//wc.ResponseHeaders["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
wc.Headers[HttpRequestHeader.UserAgent] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(url));
}
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
string result = e.Result;
XDocument ArmouryXML = XDocument.Parse(result);
ShowGuildies(ArmouryXML);
}
else
{
MessageBox.Show("Something is complaining about security but not sure what!");
}
}