سؤال

هل من الممكن إجراء مكالمة عبر الموقع، في جافا سكريبت، إلى خدمة WCF؟

لا أمانع إذا كان منشورا أو الحصول عليه.

لكنني سمعت أن هذه الأيام، لا تسمح المتصفحات بإجراء مكالمات عبر الموقع إما أو الحصول عليها.

كيف يمكنني التحايل على هذا ولا يزال استدعاء خدمة WCF?

هل كانت مفيدة؟

المحلول

ليس هناك الكثير الذي يمكنك القيام به للتحايل على حاصرات البرمجة النصية عبر المتصفح. تقوم هذه الحاصرات بإيقاف تشغيل XMLHTTPREQUEST من الحدوث بأي مجال ولكن الشخص الذي قام بتحميل البرنامج النصي أو الصفحة المحتوية.

ومع ذلك، هناك مجموعة واحدة شائعة الاستخدام: استخدم JavaScript لكتابة إدخال جديد في DOM الذي يشير إليه SRC وهو عنوان URL عبر المواقع العرضية. ستقوم بمرور جميع وسيطات طريقة RPC الخاصة بك إلى "البرنامج النصي" الذي سيعود بعض جافا سكريبت سيتم تنفيذها، وإخبارك بالنجاح أو الفشل.

لا توجد طريقة للقيام به بهذه الطريقة، يجب أن يكون عنوان URL SRC الحصول عليه، حتى تتمكن من اجتياز الوسائط بهذه الطريقة. لست متأكدا مما إذا كان لدى WCF طريقة "الحصول على" فقط ". ومع ذلك، سيتوقع المتصفح نتيجة العلامة البعيدة لتكون كائن JavaScript صالحا، سيتعين عليك التأكد من أن خدمة WCF تعويه جيدا، وإلا فسوف تحصل على أخطاء JavaScript.

الطريقة الشائعة الأخرى للتحايل على البرمجة النصية عبر الموقع هي كتابة وكيل لطلباتك. بمعنى آخر، إذا كنت ترغب في الوصول إلى المجال Test.com من البرامج النصية المستضافة على example.com، ثم قم بإجراء بعض URL على example.com الذي يقوم بتوكيل الطلب على Test.com بالطريقة الصحيحة.

على سبيل المثال، من المحتمل أن يكون الجواب الصحيح، على افتراض أن WCF لا يحتوي على قيود البرمجة النصية عبر الموقع الخاصة.

نصائح أخرى

هل تستخدم مسج بأي فرصة؟ يدعم JQuery طلبات JSON المجالات عبر المجال باستخدام "JSONP". سوف تقتصر على الحصول على طلبات، لكنني جربتها وتكون جيدا! من السهل أيضا الحصول على العمل.

راجع قسم "GetJson عبر المجال (باستخدام JSONP)" في هذه الصفحة للحصول على التفاصيل:http://docs.jquery.com/release:jquery_1.2/ajax.

وهنا بعض الخلفية حول JSONP:http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

أعلمني كيف سيسير الامر!

يجري توحيد توصيات W3C الجديدة للسماح بطلبات الموقع بين الأطراف الموثوق بها عبر التحكم في الوصول لطلبات الموقع تخصيص.

يتطلب ذلك خادم يقدم رؤوس HTTP للتحكم في الوصول المناسبة ومتصفح قادر على فهم هذه الرؤوس والتصرف عليها.

باختصار، إذا كان المضيف البعيد يقول إنه يحب المجال الخاص بك، ويفلم المتصفح ما يعنيه هذا الأمر، فيمكنك إجراء XMLHTPRECESS ضد هذا المضيف بغض النظر عن سياسة الأصل نفسه.

حاليا عدد قليل جدا من المتصفحات تدعم هذه الوظيفة. على ما يبدو IE8 على ما يبدو (لم أختبره) و Firefox 3.1 هل (اخترت هذا على نطاق واسع). أتوقع متصفحات أخرى تتابع بسرعة كبيرة.

يجب ألا تتوقع اعتماد كافية للمتصفحات المتوافقة حتى عام 2012 في أقرب وقت ممكن.

هذا هو الحل النهائي للمشكلة. الجانب السلبي ينتظر بضع سنوات قبل أن يتم استخدامه في التطبيقات الرئيسية.

إذا كان هذا للاستخدام في بيئة، فأنت تحكم بالكامل، مثل إنترانت حيث يمكنك تحديد المستعرض المستخدم وأين يمكنك تكوين خوادم متعددة لإصدار الرؤوس الصحيحة، فهو يعمل بشكل مثالي.

للتوسع في إجابة بن ... قدمت خدمة WCF لدينا لدعم مكالمات JSONP من JQuery باستخدام الرمز مماثلة لهذا المثال من Microsoft:

http://msdn.microsoft.com/en-us/library/cc716898.aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top