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