2009-03-14 21 views
0

ここに問題があります。SilverlightのWebClientがサーバーに接続していません

Silverlight 2アプリケーションをホストしているASP.netのWebサイトがあります。 私はサイトが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"を追加しました)。

私は、silverclickがwebclient経由で接続するためのポリシーを必要としているが、私はサーバーとSilverlightアプリケーションの両方に同じサーバーと同じドメインを使用しています!

すべての返信いただきありがとうございます。

編集:私はこの例外が供給しています:

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

また、私がreadingにしていることによると、xapの展開URIと要求URIも同じポートでなければなりません。

しかし、サーバーのプロパティを特定のポートでホストするように設定しても、同じポートをリッスンするようにリスナーを設定すると、メッセージが表示されずに失敗します。プロセスはファイルにアクセスできません別のプロセスで使用されます。私は、httpリスナーがそれをホストするために使用されている同じポートを聞くことができないためと推測しています。 しかし、SilverlightでホストWebクライアントの要求をどのように行うことができますか?

答えて

1

これはテストにすぎないので、「else TextBox1.Text = e.Error.ToString();」を追加します。あなたのTestDownloadStoriesCompletedハンドラでエラーを確認してください。

EDIT:

あなたがasp.netアプリと同じポート上のリスナーの両方をホストすることはできません - あなたが別のポートを使用して、HttpListenerをからclientaccesspolicy.xmlを提供することによってこの問題を解決することができます。

しかし、WCF Webサービス(asp.netアプリケーションにsvcを追加する)を見てみると、もっと意味があると思います。ここにはsampleがあります。

+0

ありがとう、私はそれをしました。私は自分の投稿を編集します。 –

0

現在、通信にHTTPハンドラを使用しています。私はまだWCFを試してみたいと思いますが、彼らは私の目的のために十分にうまくいくと思われます。

1

http://www.fiddler2.com/fiddler2/ などのツールを使用して、リクエスト中に実際に何が起こっているのかを確認できます。 これはさらにデバッグに役立つことがあります。

+0

お薦めいただきありがとうございます! –

関連する問題