ここで問題が発生しました。
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クライアント要求を実行させるにはどうすればよいですか?