سؤال

لدي مشكلة هنا.

لقد حصلت على موقع ASP.NET على موقع Silverlight 2. أرغب في التواصل مع الموقع من تطبيق Silverlight وذهابا ، وأنا أقوم بذلك عبر طلبات HTTP. بالمناسبة ، إذا كان أي شخص يعرف طريقة أفضل ، فالرجاء إخباري.

حصل خادمي على إعداد مستمع HTTP التالي. لقد قمت بنسخ هذا من موقع تعليمي في مكان ما ، نظرًا لأنه تجريب بشكل أساسي في الوقت الحالي:

      HttpListener listener = new HttpListener (  );
      listener.Prefixes.Add("http://localhost:4531/MyApp/");  
      listener.Start(  );                                         

      // Wait for a client request:
      HttpListenerContext context = listener.GetContext(  );

      // Respond to the request:
      string msg = "You asked for: " + context.Request.RawUrl;
      context.Response.ContentLength64 = Encoding.UTF8.GetByteCount (msg);
      context.Response.StatusCode = (int) HttpStatusCode.OK;

      using (Stream s = context.Response.OutputStream)
      using (StreamWriter writer = new StreamWriter (s))
        writer.Write (msg);

      listener.Stop(  );

أنا أستخدم الرمز التالي لإرسال طلب:

 private void MyButton_Click(object sender, RoutedEventArgs e)
        {
            Button b = sender as Button;
            b.Content = "Hello World";

            Uri serviceUri = new Uri("http://localhost:4531/MyApp/");
            WebClient downloader = new WebClient();
            downloader.DownloadStringCompleted += new DownloadStringCompletedEventHandler(TestDownloadStoriesCompleted);
            downloader.DownloadStringAsync(serviceUri);

        }
        void TestDownloadStoriesCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                TextBox1.Text = e.Result;
            }
        }

مشكلتي هي أنه يمكنني الاتصال بخادم الويب من تطبيق وحدة التحكم باستخدام نفس الرمز إلى حد كبير (لقد اختبرته عن طريق إعداد نقطة توقف في الكود) ، ولكن لا يحدث شيء عند النقر فوق الزر الموجود في Silverlight. (لقد أضفت "Hello World" لاختبار أنني أقوم بالفعل بتوصيل المندوب بالزر.)

لقد قرأت أن Silverlight تحتاج إلى سياسات للاتصال عبر WebClient ، ولكن لا ينبغي أن يكون الأمر كذلك إذا كنت أستخدم نفس الخادم ونفس المجال لكل من الخادم وتطبيق Silverlight!

شكرا لجميع ردودك!

تحرير: أنا أتلقى هذا الاستثناء:

System.Security.SecurityException ---> System.Security.SecurityException: خطأ أمان.

أيضا ، بناء على ما أنا قراءة على ما يبدو ليكون موقع الأصل ، يجب أن يكون نشر URI من XAP وطلب URI من نفس المنفذ.

ومع ذلك ، عندما أقوم بتعيين خصائص الخادم لاستضافتها على منفذ معين ، وقمت بتعيين المستمع للاستماع إلى نفس المنفذ ، فإنه يفشل في الرسالة التي مفادها أن العملية لا يمكنها الوصول إلى الملف لأنه يتم استخدامه بواسطة عملية أخرى . أفترض أن ذلك لأن مستمع HTTP لا يمكنه الاستماع إلى نفس المنفذ المستخدم لاستضافته: | ولكن بعد ذلك ، كيف يمكنني جعل Silverlight أداء مجموعة من طلبات ويب الأصل؟

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

المحلول

نظرًا لأن هذا الاختبار فقط ، أضف "textbox1.text = e.error.toString () ؛" في معالج TestDownloadStories Completed لمعرفة الخطأ الذي تحصل عليه.

تعديل:

لا يمكنك استضافة كل من تطبيق ASP.NET ومستمعك على نفس المنفذ - يمكنك إصلاح ذلك باستخدام منفذ مختلف وخدمة ClientAccessPolicy.xml من httplistener الخاص بك.

ومع ذلك ، أعتقد أنه سيكون من المنطقي بالنسبة لك إلقاء نظرة على خدمات الويب WCF (يمكنك إضافة SVC إلى تطبيق ASP.NET الخاص بك). ها هو عينة.

نصائح أخرى

يمكنك استخدام أدوات مثل http://www.fiddler2.com/fiddler2/لمعرفة ما يجري في الواقع أثناء الطلب .... يمكن أن يقدم هذا بعض المساعدة لمزيد من التصحيح ...

أنا الآن أستخدم معالجات HTTP للتواصل. يبدو أنهم سيعملون بشكل جيد بما فيه الكفاية لغرضي ، على الرغم من أنني ما زلت أرغب في تجربة بعض WCF.

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