SilverlightのWebClientがサーバーに接続していません
-
22-07-2019 - |
質問
ここで問題が発生しました。
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;
}
}
私の問題は、ほぼ同じコードを使用してコンソールアプリケーションからWebサーバーに接続できることです(コードにブレークポイントを設定してテストしました)が、silverlightのボタンをクリックしても何も起こりません。 (「Hello World」を追加して、実際にデリゲートをボタンに接続していることをテストしました。)
silverlightはwebclient経由で接続するためのポリシーを必要とすることを読みましたが、サーバーとsilverlightアプリケーションの両方に同じサーバーと同じドメインを使用している場合は当てはまりません!
すべての返信をありがとう!
編集:この例外を受け取っています:
System.Security.SecurityException ---> System.Security.SecurityException:セキュリティエラー。
また、私が reading は明らかにサイトの起源であり、xapのデプロイメントURIとリクエストURIも同じポートである必要があります。
ただし、サーバーのプロパティを特定のポートでホストされるように設定し、リスナーに同じポートをリッスンするように設定すると、使用中のためプロセスにファイルにアクセスできませんというメッセージが表示されて失敗します別のプロセスによって。これは、HTTPリスナーがホストに使用されているのと同じポートをリッスンできないためだと思います:| しかし、その後、SilverlightにオリジンWebクライアントリクエストのホストを実行させるにはどうすればよいですか?
解決
これは単なるテストであるため、" else TextBox1.Text = e.Error.ToString();" TestDownloadStoriesCompletedハンドラーで、どのエラーが発生するかを確認してください。
編集:
asp.netアプリとリスナーの両方を同じポートでホストすることはできません。別のポートを使用し、httplistenerからclientaccesspolicy.xmlを提供することでこれを修正できます。
ただし、WCF Webサービス(asp.netアプリにsvcを追加する)を確認する方が理にかなっていると思います。 サンプル。
他のヒント
http://www.fiddler2.com/fiddler2/ などのツールを使用できます。 リクエスト中に何が起こっているかを実際に見るために.... これにより、さらにデバッグするための助けが得られます...
現在、通信にHTTPハンドラーを使用しています。まだいくつかのWCFを試してみたいとは思いますが、私の目的には十分に機能するようです。