문제

여기에 문제가 있습니다.

Silverlight 2 응용 프로그램을 호스팅하는 ASP.NET 웹 사이트가 있습니다. 사이트가 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;
            }
        }

내 문제는 거의 동일한 코드를 사용하여 콘솔 애플리케이션에서 웹 서버에 연결할 수 있다는 것입니다 (코드에서 중단 점을 설정하여 테스트했습니다). (나는 실제로 대의원을 버튼에 연결하고 있음을 테스트하기 위해 "Hello World"를 추가했습니다.)

Silverlight는 WebClient를 통해 연결하기 위해 정책이 필요하다는 것을 읽었지만 서버와 Silverlight 애플리케이션 모두에 동일한 서버와 동일한 도메인을 사용하는 경우에는 해당되지 않아야합니다!

모든 답변에 감사드립니다!

편집 :이 예외를 받고 있습니다.

System.Security.SecurityException ---> System.Security.SecurityException : 보안 오류.

또한, 내가 무엇을 바탕으로 독서 XAP의 배포 URI 및 요청 URI도 동일한 포트에 있어야합니다.

그러나 서버가 특정 포트에서 호스팅되도록 속성을 설정하고 리스너가 동일한 포트를 듣도록 설정하면 프로세스가 다른 프로세스에서 사용 중이기 때문에 프로세스에 액세스 할 수 없다는 메시지가 실패합니다. . HTTP 리스너가 호스팅하는 데 사용되는 동일한 포트를들을 수 없기 때문입니다. | 그러나 실버 라이트가 원산지 웹 클리어 요청의 호스트를 수행하게하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

이것은 단지 테스트이므로 "else textbox1.text = e.error.tostring ();" TestDownloadStories에서 어떤 오류가 발생하는지 확인하기 위해 Handler를 작성했습니다.

편집하다:

동일한 포트에서 ASP.NET 앱과 리스너를 모두 호스팅 할 수 없습니다. 다른 포트를 사용하고 httplistener에서 ClientAccessPolicy.xml을 제공 하여이 문제를 해결할 수 있습니다.

그러나 WCF 웹 서비스를 살펴 보는 것이 더 합리적이라고 생각합니다 (ASP.NET 앱에 SVC를 추가). 여기에 있습니다 견본.

다른 팁

당신은 같은 도구를 사용할 수 있습니다 http://www.fiddler2.com/fiddler2/실제로 요청 중에 무슨 일이 일어나고 있는지 보려면 .... 이것은 추가 디버깅에 도움이 될 수 있습니다 ...

나는 현재 커뮤니케이션을 위해 HTTP 핸들러를 사용하고 있습니다. 나는 여전히 WCF를 시험해보고 싶지만 내 목적을 위해 충분히 잘 작동하는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top