我这里有一个问题。

我有一个ASP.net网站托管的Silverlight 2应用程序。 我想现场沟通来来回回从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;
            }
        }

我的问题是,我可以连接到使用几乎相同的代码(我通过设置代码断点测试它)一个控制台应用程序的网络服务器,但没有任何反应,当我点击在Silverlight的按钮。 (我已经添加了“Hello World”的测试,我委托确实连接到按钮。)

我读过的Silverlight需要政策通过Web客户端进行连接,但如果我使用的是相同的服务器和服务器和Silverlight应用程序都相同的域不应该是这样的!

感谢您的答复!

编辑:我recieving此异常:

System.Security.SecurityException ---> System.Security.SecurityException:安全错误

此外,基于什么我的显然是站点的原产的XAP部署URI和请求URI也必须是相同的端口。

然而,当我设置的属性为在特定端口上被托管的服务器,我设置收听者收听相同的端口,它失败与该过程不能访问该文件的信息,因为正在使用它另一个进程。我想这是因为HTTP监听器不能听同一端口被用来承载它:| 但后来我怎样才能使Silverlight的执行原点Web客户端请求的主机?

有帮助吗?

解决方案

由于这只是一个测试添加一个“其他TextBox1.Text = e.Error.ToString();”在TestDownloadStoriesCompleted处理程序来看看你会得到什么样的错误。

编辑:

您无法同时承载的asp.net应用程序,您在同一端口上监听器 - 您可以通过使用不同的端口,并从httplistener服clientaccesspolicy.xml解决这个问题

不过,我认为这会更有意义给你看看WCF Web服务(你的SVC添加到您的asp.net应用程序)。这里有一个样品

其他提示

您可以使用工具,如 http://www.fiddler2.com/fiddler2/ 实际看到的请求期间发生了什么事.... 这可以得到一些帮助进一步调试...

我现在使用HTTP处理程序进行通信。看来他们将工作对我来说已经足够精细,但我还是想尝试一些WCF。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top