调用从Silverlight的外部网站(calling external websites from

2019-10-19 15:43发布

我写一个小的Silverlight应用程序只是尝试的Silverlight。 我的想法是让一个小应用程序来检查,如果网站是在线。 它通过用户输入URL和我的应用程序检查它每隔5分钟运行时间。

但是,当过我做的WebRequest我得到下面的安全异常。 阅读http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(VS.95).aspx这似乎表明Silverlight的不允许跨域连接。 那么,有没有办法让在Silverlight我的想法的工作?

示例代码:

     WebRequest testHTTP = null;
            try
            {
                testHTTP = WebRequest.Create(serverToCheck);
            }
            catch (UriFormatException ufe)
            {
                try
                {
                    testHTTP = WebRequest.Create("http://" + serverToCheck);
                }
                catch (UriFormatException ufe1)
                {
                    MessageBox.Show("Invalid server address");

                }
            }
            if (testHTTP != null)
            {
                testHTTP.BeginGetResponse(new AsyncCallback(doCheck), testHTTP); 

                }

  void doCheck(IAsyncResult a)
    {
        try
        {
            HttpWebRequest req = (HttpWebRequest)a.AsyncState;
            HttpWebResponse res = (HttpWebResponse)req.EndGetResponse(a);

             Dispatcher.BeginInvoke(() => HTTPStatus.Content = "OK");

        }
        catch (Exception ex)
        {
  //handle exception
        }

    }

在System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult的asyncResult)在System.Net.Browser.BrowserHttpWebRequest。<> c__DisplayClass5.b__4(对象sendState)在System.Net.Browser.AsyncHelper。<> c__DisplayClass2.b__0(对象sendState) ---内部异常堆栈跟踪的末尾在System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态)在System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult的asyncResult)在monitor.Home.doCheck( IAsyncResult的一)}

Answer 1:

你不能覆盖服务器的跨域策略在Silverlight 3在Silverlight 4中 ,你可以与信任的“出的浏览器”应用程序。

最好的办法是创建一个在同一个域作为一个托管的Silverlight应用程序运行,并让它做检查的服务。



Answer 2:

您可以在ASP.Net连接到任何网站,并告诉你它是否是一个服务器端的页面。
因为它会在同一个域中的Silverlight应用程序托管,它会正常工作。 (ASP.Net就没有这样的限制)

请注意,它会再检查服务器是否可以连接到网站,而不是客户端。



Answer 3:

您尝试访问的网站需要一个跨域策略文件到位,以允许访问。 Arbitary网站是不可能有这些,所以你正在试图做的是阻止的。



Answer 4:

我想URI需要在​​根clientaccesspolicy.xml或crossdomain.xml文件的目标。 该解决方案可以使位于您的服务器处理请求的WCF服务。



文章来源: calling external websites from silverlight