Silverlight请求HttpHandler获取数据

1)在initParams配置参数“UploadHandlerName=Ajax/HttpUploadHandler.ashx”。

2)在Silverlight程序中的添加文件的方法中编写请求代码。这块值得注意的,一是路径,二是获取到数据后,要使用this.Dispatcher.BeginInvoke来更新界面(否则会出异常)。具体代码如下:

public class RequestStates
{
    /// <summary>
    /// 当前请求
    /// </summary>
    public HttpWebRequest CurrentWebRequest { get; set; }
    /// <summary>
    /// 当前用户文件
    /// </summary>
    public UserFile CurrentUserFile { get; set; }
}
private void AddFile(FileInfo file)
{
    string fileName = file.Name;
    var userFile = new UserFile { FileName = file.Name, FileStream = file.OpenRead() };

    if (!string.IsNullOrEmpty(Configuration.Instance.CheckExtensionsHandlerName))
    {
        //获取处理的Handler类的路径
        UriBuilder httpHandlerUrlBuilder = new UriBuilder(new CustomUri(Configuration.Instance.CheckExtensionsHandlerName));
        //设置请求的参数
        httpHandlerUrlBuilder.Query = string.Format("{2}file={0}&Extension={1}", HttpUtility.UrlEncode(userFile.FileName), HttpUtility.UrlEncode(Path.GetExtension(userFile.FileName)), string.IsNullOrEmpty(httpHandlerUrlBuilder.Query) ? string.Empty : httpHandlerUrlBuilder.Query.Remove(0, 1) + "&");
        //创建请求
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(httpHandlerUrlBuilder.Uri);
        request.Method = "POST";
        //设置自定义信息,用于异步请求
        var requestStates = new RequestStates()
                                 {
                                     CurrentUserFile = userFile,
                                     CurrentWebRequest = request
                                 };
        //开始异步请求
        request.BeginGetRequestStream(new AsyncCallback(RequestReady), requestStates);
    }
    else
    {
        _files.Add(userFile);
    }
}
private void RequestReady(IAsyncResult asynchronousResult)
{
    var requestStates = (RequestStates)asynchronousResult.AsyncState;
    HttpWebRequest webRequest = requestStates.CurrentWebRequest;
    Stream requestStream = webRequest.EndGetRequestStream(asynchronousResult);
    requestStream.Close();
    webRequest.BeginGetResponse(new AsyncCallback(ResponseReady), requestStates);
}
void ResponseReady(IAsyncResult asyncResult)
{
    var requestStates = (RequestStates)asyncResult.AsyncState;
    HttpWebRequest webRequest = requestStates.CurrentWebRequest;
    var userFile = requestStates.CurrentUserFile;
    var webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncResult);
    var reader = new StreamReader(webResponse.GetResponseStream());
    //获取Httphandler类返回的数据
    string responsestring = reader.ReadToEnd();
    reader.Close();
    decimal maxSize = Convert.ToDecimal(responsestring);
    //Check for the file size limit (configurable)
    if (maxSize == 0 || (userFile.FileStream.Length / 1024) <= maxSize)
    {
        this.Dispatcher.BeginInvoke(
            () => _files.Add(userFile)
            );

    }
    else if (maxSize < 0)
    {
        this.Dispatcher.BeginInvoke(
            delegate()
            {
                var messageWindow = new MessageChildWindow
                                                       {
                                                           Message =
                                                               string.Format("不允许上传{0}类文件!",
                                                                             Path.GetExtension(userFile.FileName))
                                                       };
                messageWindow.Show();

                if (MaximumFileSizeReached != null)
                    MaximumFileSizeReached(this, null);
            });
    }
    else
    {
        this.Dispatcher.BeginInvoke(
            () =>
            {
                var messageWindow = new MessageChildWindow
                                        {
                                            Message =
                                                string.Format("{0}{1}{2}KB.",
                                                              Path.GetExtension(userFile.FileName),
                                                              UserMessages.MaxFileSize, (maxSize).ToString())
                                        };
                messageWindow.Show();

                if (MaximumFileSizeReached != null)
                    MaximumFileSizeReached(this, null);
            });
    }
}

效果图片

时间: 2024-09-22 07:01:47

Silverlight请求HttpHandler获取数据的相关文章

jquery ajax-jQuery ajax获取数据问题

问题描述 jQuery ajax获取数据问题 程序片段如下: var data_1; $.post("getdata.php",function(string_1){ data_1 = string_1; });为什么string_1的内容无法被获取呢?_ 要想获取其内容,应该如何做呢?麻烦指点下! getdata.php: <?php_ $con = mysql_connect('localhost','root'); mysql_select_db('my_db',$con)

Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

[正文]  一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是Internet上目前使用最广泛的应用层协议,它基于传输层的TCP协议进行通信,HTTP协议是通用的.无状态的协议. 这几个名词有一种通俗的解释: 通讯协议:双方对话的标准 通用的:用了都说好,谁用谁知道 无状态的:翻脸不认人 超文本:除了文本,还可以是音频.视频 HTTP协议与Android开发

请求-数据库如何获取数据发送地址

问题描述 数据库如何获取数据发送地址 目前我获取数据的路径是:客户端请求--中间层转化为数据库请求--数据库发送数据到中间层--中间层转发数据给客户端 这样会消耗大量资源,能不能改变成: 客户端请求--中间层转化为数据库请求--数据库发送数据到客户端? 那位大虾讲一下数据库是如何确定数据发送目的地? 解决方案 之所以提出这个问题,就是既想得到3层结构的好处,又能避免数据必须通过中间层转发的弊端.但现在看来,客户端与数据库服务器要建立连接才能实现数据发送,的确不利于服务器扩展负载, 捡了芝麻丢了西

extjs4-grid嵌grid,本地数据能够正常显示,后台获取数据发现内层不显示,但是数据已经请求到了

问题描述 grid嵌grid,本地数据能够正常显示,后台获取数据发现内层不显示,但是数据已经请求到了 各位,想请教一下,现grid嵌grid,本地数据能够正常显示,后台获取数据发现内层不显示,但是数据已经请求到了!图片说明](http://img.ask.csdn.net/upload/201505/13/1431475834_74475.jpg)![图片说明](http://img.ask.csdn.net/upload/201505/13/1431475819_942503.png)

ajax请求action后,数据存放在session中,jsp页面通过el获取数据,可是第一次登录总

问题描述 ssh项目中,我需要登陆某个页面(如a.jsp),通过onload来触发js函数(函数是ajax请求)请求到相应的action,处理完成后将数据存放到session对象里面,然后在a.jsp中用el表达式获取想要的数据,这是我的设计思路.可是问题来了,不知道为什么在打开浏览器第一次登录a页面时,a页面不会显示想要的数据,刷新后就有数据了,之后也正常.这是为什么了???我该如何解决这个问题了?或有什么好的办法可以实现登陆一个页面,页面上数据是从服务器端获取的,的方法吗? 解决方案 解决方

发送post请求-向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少

问题描述 向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少 向拍拍发送POST请求,获取的数据出现部分中文乱码和记录数很少?在在线工具测试的时候,能够获取大量的数据,一般有上百万的命中数,返回一页大概40条记录,但是现在获取的数据命中数hitNum都是18,返回的数据也都是低于18.请各位大神多多指点!!!!!感激不尽.附上源代码和部分获取的数据. 源代码:private String postRequest(String url, HashMap cookies, String

客户端获取服务端纯数据,我所知的有2种方案,1是javascript读取web service,2是专门用一个iframe来请求服务端页面从而获取数据 。请大家说下哪种速度最快,或者有没有更好的方案

问题描述 客户端获取服务端纯数据,我所知的有2种方案,1是javascript读取webservice,2是专门用一个iframe来请求服务端页面从而获取数据.请大家说下哪种速度最快,或者有没有更好的方案 解决方案 解决方案二:up解决方案三:客户端获取服务端纯数据ajax请求页面返回json格式也算纯数据的解决方案四:httprequest

AJAX跨域请求JSONP获取JSON数据的实例代码

Asynchronous JavaScript and XML (Ajax) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索.使用XMLHttpRequest 函数获取数据,它是一种 API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器.Ajax 也是许多 mashup 的驱动力,它可将来自多个地方的内容集成为单一 Web 应用程序. 不过,由于受到浏览器的限制,该方法

使用AJAX异步获取数据

ajax|数据|异步 [导读]本文给出一个例子(使用AJAX异步获取数据),介绍如何去使用AJAX. AJAX这个名字看起来很神奇,我第一次见到它也被它吸引了,它是Asynchronous JavaScript and XML的简写,异步的JAVASCRIPT和XML,关于AJAX的介绍在网上的介绍太多了,我就不多那么多了,我的口才不好,没他们说的那么精彩,可以去http://zh.wikipedia.org/wiki/AJAX 看看,在这里我只是给大家一个例子,了解如何去使用AJAX. AJA