首页 / 软件开发 / Silverlight / Silverlight 2.0正式版跨域提交数据全攻略
Silverlight 2.0正式版跨域提交数据全攻略2011-09-17孟宪会【注】本文代码基于 Silverlight 2.0 正式版。Silverlight 2.0 正式版发布之后,在 HttpWebrequest 方面也发生了一些变化,以前的代码正式版 里面可能就无法运行了,具体的变化主要有:1,在调用 HttpWebRequest.BeginGetResponse() 之前,Request 流必须关闭;2,HttpWebRequest.EndGetResponse() 抛出的异常,正式版之前, HttpWebRequest.BeingGetResponse() 中跨域、跨协议访问抛出安全性异常,其他的请求都返回404错误 ,现在,HttpRequest.EndGetResponse()的错误将作为异常抛出,涉及安全问题的错误抛出 SecurityException,非成功的请求会抛出 WebException 异常,WebException.Response 被设置成 HttpStatusCode.NotFound。由于 HttpWebrequest 发送的是异步请求,如果要与界面交互,还涉及到线程同步的问题,如果不进 行线程同步,会报告“跨线程访问无效”的错误。下面就以实际的例子来向一个 Java Servlet 地址提交 数据,将提交的数据返回到当前界面中。当然,提交到 aspx 页面上也没有问题的,只需要在 Page_Load 事件处理方法里加入下面的代码即可:protected void Page_Load(object sender, EventArgs e)
{
if (Request.RequestType.Equals("POST"))
{
Response.ClearContent();
Response.ClearHeaders();
Response.Write("您提交的数据是:" + Request.Params.Get ("data"));
Response.End();
return;
}
}
如果提交到 Java Servlet,则测试代码可以写:public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().print("您提交的数据是:" + request.getParameter("data"));
}
要在本机进行跨域测试,需要在hosts文件进行设置,如:127.0.0.1 www.mengxianhui.com127.0.0.1 www.xianhuimeng.com