Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从silverlight调用外部网站_C#_Silverlight_Httpwebrequest - Fatal编程技术网

C# 从silverlight调用外部网站

C# 从silverlight调用外部网站,c#,silverlight,httpwebrequest,C#,Silverlight,Httpwebrequest,我正在编写一个小的silverlight应用程序,只是为了尝试silverlight。我的想法是制作一个小应用程序来检查网站是否在线。它的工作原理是用户输入URL,我的应用程序每5分钟检查一次正常运行时间 但每当我做一个webrequest时,我都会遇到下面的安全异常。阅读它似乎表明silverlight不允许跨域连接。那么,有没有办法让我的想法在silverlight中发挥作用 示例代码: WebRequest testHTTP = null; try

我正在编写一个小的silverlight应用程序,只是为了尝试silverlight。我的想法是制作一个小应用程序来检查网站是否在线。它的工作原理是用户输入URL,我的应用程序每5分钟检查一次正常运行时间

但每当我做一个webrequest时,我都会遇到下面的安全异常。阅读它似乎表明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.Security.SecurityException-->System.Security.SecurityException:安全错误。 位于System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 在System.Net.Browser.BrowserHttpWebRequest.c__DisplayClass5.b__4(对象发送状态)中 在System.Net.Browser.AsyncHelper.c__DisplayClass2.b__0(对象发送状态)中 ---内部异常堆栈跟踪的结束--- 位于System.Net.Browser.AsyncHelper.BeginNoui(SendOrPostCallback beginMethod,对象状态) 位于System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
在monitor.Home.doCheck(IAsyncResult a)}

中,您可以在ASP.Net中创建一个服务器端页面,该页面连接到任何网站,并告诉您是否已启动。
由于它将托管在与Silverlight应用程序相同的域中,因此它可以正常工作。(ASP.Net没有此类限制)


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

您不能在Silverlight 3中覆盖服务器的跨域策略。在中,您可以使用受信任的“浏览器外”应用程序


您最好的选择是创建一个与Silverlight应用程序所在域在同一域上运行的服务,并让它进行检查。

您尝试访问的站点需要一个跨域策略文件以允许访问。任意站点不太可能有这些,因此您尝试执行的操作被阻止。

我猜目标URI需要根目录中的clientaccesspolicy.xml或crossdomain.xml文件。解决方案可能是在您的服务器上创建一个WCF服务来处理请求