0

ここで問題が発生しました。

Silverlight2アプリケーションをホストしているASP.netWebサイトがあります。このサイトが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;
            }
        }

私の問題は、ほぼ同じコードを使用してコンソールアプリケーションからWebサーバーに接続できることです(コードにブレークポイントを設定してテストしました)が、Silverlightでボタンをクリックしても何も起こりません。(「HelloWorld」を追加して、実際にデリゲートをボタンに接続していることをテストしました。)

SilverlightにはWebクライアント経由で接続するためのポリシーが必要であることを読みましたが、サーバーとSilverlightアプリケーションの両方に同じサーバーと同じドメインを使用している場合はそうではありません。

返信ありがとうございます!

編集:私はこの例外を受け取っています:

System.Security.SecurityException ---> System.Security.SecurityException:セキュリティエラー。

また、私が読んでいるサイトオブオリジンであると思われるものに基づいて、xapのデプロイメントURIとリクエストURIも同じポートである必要があります。

ただし、サーバーのプロパティを特定のポートでホストするように設定し、リスナーが同じポートをリッスンするように設定すると、別のプロセスで使用されているため、プロセスがファイルにアクセスできないというメッセージが表示されて失敗します。 。httpリスナーは、ホストに使用されているのと同じポートをリッスンできないためだと思います:| しかし、SilverlightにホストオブオリジンのWebクライアント要求を実行させるにはどうすればよいですか?

4

3 に答える 3

1

これは単なるテストなので、「elseTextBox1.Text = e.Error.ToString();」を追加します。TestDownloadStoriesCompletedハンドラーで、どのエラーが発生するかを確認します。

編集:

asp.netアプリとリスナーの両方を同じポートでホストすることはできません。別のポートを使用し、httplistenerからclientaccesspolicy.xmlを提供することで、これを修正できます。

ただし、WCF Webサービス(asp.netアプリにsvcを追加する)を確認する方が理にかなっていると思います。これがサンプルです。

于 2009-03-14T17:04:37.490 に答える
1

http://www.fiddler2.com/fiddler2/のようなツールを使用 して、リクエスト中に何が起こっているかを実際に確認できます....これにより、さらにデバッグするための助けが得られます...

于 2009-03-14T23:42:38.703 に答える
0

現在、通信に HTTP ハンドラーを使用しています。私はまだいくつかの WCF を試してみたいと思っていますが、私の目的には十分に機能するようです。

于 2009-03-14T18:54:10.690 に答える