随笔 - 25  文章 - 14 评论 - 212 trackbacks - 0
    /// <summary>
    /// 清理IE缓存
    /// </summary>
    private void ClearShell()
    {
        Shell S = new Shell();
        int CSIDL_INTERNET_CACHE = 0x20;
        Folder F = S.NameSpace(CSIDL_INTERNET_CACHE);
        foreach (FolderItem FI in F.Items())
        {
            string name = FI.Name;
            if (name == "ShenTong.QualityPlatform.SilverlightFrontPage.xap" || name == "Default.aspx")
            {
                foreach (FolderItemVerb fiv in FI.Verbs())
                    if (fiv.Name == "删除(&D)") // 删除xap包
                    {
                        fiv.DoIt();
                        break;
                    }
            }
        }
        Marshal.FinalReleaseComObject(S);
    }
posted @ 2011-06-22 14:53 品香一郎 阅读(370) 评论(2) 编辑

这两天被silverlight的文件下载搞死了!~~~网上找的一堆全是通过异步去下载文件流,通过已知的文件在服务器端的地址,但实际项目应用中

出于安全考虑很多中小型文件还是通过大对象存储在数据中的!~~ 下面通过两个例子和大家分享 silverlight的大对象文件下载!~

 

一。直接在silverlight客户端下载文件

 在silverlight客户端提示用户下载文件,采用SaveFileDialog 控件,该控件是先生成文件再往文件中写入文件流,但缺点是SaveFileDialog的

 SafeFileName 是只读的,在弹出来的下载提示框中要求用户输入要保存的文件名,这样的用户体验就非常的不爽了!~

 

代码如下:

                #region silverlight下载代码
                SaveFileDialog sf = new SaveFileDialog();
                sf.SafeFileName

//由于 SafeFileName 是只读的,但要保证用户下下来的文件类型和和原来文件类型是一致,否则文件就不能用

                string extent = Path.GetExtension(Info.AttachFileName);//Info 是一个对象,AttachFileName 是要下载的文件全名,这里是获取原文件的后缀,用的时候换成自己的存储的文件名,以下出现的Info 都是我自己用的实体类
                string extension = string.Format("(*{0})|*{1}|所有文件 (*.*)|*.*", extent, extent);
                if (string.IsNullOrEmpty(extent))
                {
                    extension = "Word文件 (*.docx)|*.docx|zip压缩文件 (*.zip)|*.zip|所有文件 (*.*)|*.*";
                }
                sf.DefaultExt = extension;
                sf.Filter = extension;
                sf.FilterIndex = 1;
                if (sf.ShowDialog() != true) return;
                Stream clientStream = sf.OpenFile();
                using (Stream serverStream = new MemoryStream(Info.AttachFile))//Info 是一个对象,AttachFile 是byte[] 类型,是文件字节数组
                {
                    byte[] buffer = new byte[serverStream.Length];
                    serverStream.Read(buffer, 0, buffer.Length);
                    clientStream.Write(buffer, 0, buffer.Length);
                    clientStream.Close();
                }

                #endregion 

 

二。silverlight结合asp.net的文件实现下载

 1.silverlight.xaml代码

<Button Content="下载" Click="FileButtonClick"  x:Name="fileButton"  /> 

 

 2. silverlight.xaml.cs 代码

            var goToPage = HtmlPage.Window.GetProperty("SilverlightFileDownLoad") as ScriptObject;

                if (goToPage != null)
                    goToPage.InvokeSelf(string.Format("SilverlightFile.ashx?id={0}", Info.Id.ToString()));//调用Default.aspx页面的js方法

 

 3.Default.aspx 的JS 函数

     // silverlight调用实现文件下载

        function SilverlightFileDownLoad(message) {
            window.open('SilverlightFileDownLoad/' + message);
        }

 

4.在web网站中添加 SilverlightFileDownLoad/SilverlightFile.ashx 文件

 

     public void ProcessRequest(HttpContext context)

    {
        try
        {

   //获取从silverlight传过来的ID参数

            string idString = context.Request.QueryString["id"];
            if (!string.IsNullOrEmpty(type) && !string.IsNullOrEmpty(idString))
            {
                int id = Convert.ToInt32(idString);
                String fileName = null;
                Stream iStream = null;
                long dataLengthToRead = 0;//获得下载文件的总大小
                #region 从底层查出对象详细

 

                    GroupQuailtyNotice info = _iGroupQuailtyNoticeBLL.GetById(id);
                    fileName = info.AttachFileName;
                    iStream = new MemoryStream(info.AttachFile);//AttachFile 为 byte[] 数组
                    dataLengthToRead = info.AttachFile.Length;

 

                #endregion
                #region 页面输出下载
                if (iStream != null)
                {
                    byte[] buffer = new byte[ChunkSize];
                    context.Response.Clear();
                    context.Response.ContentType = "application/octet-stream";
                    //通知浏览器下载文件而不是打开
                    context.Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                    while (dataLengthToRead > 0 && context.Response.IsClientConnected)
                    {
                        int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(102400));//读取的大小
                        context.Response.OutputStream.Write(buffer, 0, lengthRead);
                        context.Response.Flush();
                        dataLengthToRead = dataLengthToRead - lengthRead;
                    }
                    context.Response.Close();
                    context.Response.End();
                }
                #endregion
            }
        }
        catch (System.Exception ex)
        {
        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

 

经过以上步骤就能实现像ASP.NET下载文件那样,提示文件下载,并自动保存原文件了!!! 

posted @ 2011-06-10 16:32 品香一郎 阅读(511) 评论(0) 编辑

Silverlight 4.0 开发中,使用Accordion ,在Accordion 中动态添加AccordionItem ,可以设置AccordionItem 的个数,但很难解决ScrollViewer的问题 ,即外框出现滚动条的问题

查了几个国外的网站都没有解决办法!~经常会碰到许多奇怪的问题!~在这里分析下我的解决方案!~

          <ScrollViewer Margin="0" Grid.Row="1">
                            <toolkit:Accordion Grid.Row="1" SelectionChanged="UserAcc_SelectionChanged" Name="UserAcc" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"  AccordionButtonStyle="{StaticResource AccordionButtonStyle1}">
                            </toolkit:Accordion>
            </ScrollViewer>

在Accordion 外套一个ScrollViewer ,添加SelectionChanged的方法

 

        /// <summary>
        /// 获取所选择,主要处理Accordion的高度和AccordionItem的高度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserAcc_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                AccordionItem tem = this.UserAcc.SelectedItem as AccordionItem;
                if (null != tem)
                {
                    ///根据AccordionItem 的个数来设置高度
                    this.UserAcc.Height = 600 + this.UserAcc.Items.Count * 32;//600,32 这两个数字是根据页面设计实际大大小来定的
                    tem.MaxHeight = 610;//设置最大高度,解决内部出现空白的BUG
                    // tem.ContentTargetSize 可以测试内部的实际高度
                    tem.UpdateLayout();
                }
                else
                {
                    if (this.UserAcc.Items.Count < 15)
                    {
                        this.UserAcc.Height = 500;
                    }
                    else
                    {
                        this.UserAcc.Height = this.UserAcc.Items.Count * 32 + 50;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

posted @ 2011-03-23 15:15 品香一郎 阅读(353) 评论(1) 编辑

用ASP.NET 4.0 开发的系统,在VS中运行Session 是没有问题的

 

但系统发布的时候,系统一登陆进去就Session过期了,经过各种调试发现在设置 文档--启用默认内容文档--添加一个login.aspx 页面出的问题

 

把添加的login.aspx 启用默认内容文档去掉就好了!~非常奇怪,不知道哪位遇到过这个问题

 

补充:ASP.NET 4.0  IIS 6.0

posted @ 2011-02-23 18:17 品香一郎 阅读(172) 评论(4) 编辑

3)数据流视角

4)交互需求原型视角

5)数据关系视角

 

 

多视角需求建模的要旨

 

 

l  理解从问题域到方案域的系统工程思想

l  讲究互补性

l  讲究必要行

l  讲究所表达软件需求的可行性

  经济可行性

  操作可行性

  技术可行性

posted @ 2010-06-02 17:17 品香一郎 阅读(54) 评论(0) 编辑

两步走策略

第一、提炼问题域,形成用户需求
第二、提炼方案域,形成软件需求
一.第一步、提炼问题域,形成用户需求

1.         用例模型:

参与者:参与者是指与系统交互的人或其他系统,它代表外部实体。

 

 

2.         要注意需求的步骤化描述法则

  

用例描述:

用例名称:取款

前置条件:ATM机正常工作

主事件流:

1 客户将卡插入ATM机,开始用例。

2 ATM显示欢迎消息并提示客户输入密码。

3 客户输入密码。

4ATM确认密码有效。如果无效则执行子事件流a。如果与主机联接有问题,则执行异常事件流e

5 ATM提供以下选项:存钱,取钱,查询。

6 用户选择取钱选项。

7 ATM提示输入所取金额。

8  用户输入所取金额。

9  ATM确定该帐户是否有足够的金额。如果余额不够,则执行子事件流b,如果与主机联接有问题,则执行异  常事件流e

10  ATM从客户帐户中减去所取金额。

11  ATM向客户提供要取的钱。

12  ATM打印清单。

   ATM退出客户的卡,用例结束。

  后置条件:结束取款事件。

 

3.         实例:中联书店管理系统用户需求分析

 3.1中联书店信息系统的业务需求结构
0) 书店管理信息系统
 

包括计划订购管理、书库管理、销售管理、事务管理等功能。

 
 1) 计划订购管理

     包括计划管理、订单管理、合同管理、到货管理、供应商管理和书目管理等功能。

 
 

 

计划管理:编辑计划单、查询计划、输出计划单和计划执行统计。

订单管理:编辑图书订单、查询图书订单信息和输出图书订单。

合同管理:编辑合同、查询合同、输出合同和合同执行统计。

到货管理:登记到货图书、打印入库单、统计到货情况。

供应商管理:编辑供应商信息、查询供应商信息、输出供应商信息

书目管理:编辑书目、查询书目、输出书目信息。

 

2) 书库管理

      包括图书入库管理、图书出库管理、图书盘库管理和图书报损管理等功能

 

l  图书入库管理:编辑入库信息、查询入库信息和输出入库信息。

l  图书出库管理:编辑出库信息、查询出库信息和输出出库信息。

l  图书盘库管理:盘库处理和打印盘库单。

l  图书报损管理:报损处理和打印报损单。

 

书店信息系统功能用例图的一个用例说明:

      “销售图书”:“售书处理”

第二步、方案域设计,形成软件需求

 

多视角软件需求描述方法(方案域)

 

常见系统视角比如:

l  子系统视角

l  逻辑流程视角

l  业务规则视角

l  数据关系视角

l  .

 

1)子系统视角-

2)业务规则视角

 

 

posted @ 2010-06-02 16:54 品香一郎 阅读(243) 评论(0) 编辑
摘要: 3.需求的有效进行和步骤需求分析有个口诀:一抓二定三分析,四评五控六跟踪,横批:七有效沟通。指的是:Ø 一抓业务需求Ø 二定用户需求Ø 三分析软件需求规格Ø 四评审确认需求Ø 五控制需求Ø 六跟踪需求转化Ø 七有效沟通3.1抓业务需求业务需求是什么?业务需求的主要工作是什么?重点是什么?业务一般由需求分析师去做分析,业务需求的第...阅读全文
posted @ 2010-05-29 22:14 品香一郎 阅读(984) 评论(1) 编辑
摘要: 这几天每天都是早上5点多起床,做公交倒地铁再倒地铁再倒公交,在路上都光折腾了两个多小时,参加了北京高级需求分析师的相关培训,我们每天都提需求,也因为需求我们的项目都存在不同的延期,需求变更管理,需求分析,需求管理等都是我们软件项目中存在的一个大问题,本人也是在不断的学习过程中,对需求的认识也还很肤浅,对于这次学习把一些心得和大家分享分享,其中系列文章中都是经过自己加工写出来的白话,希望能和大家探讨...阅读全文
posted @ 2010-05-28 23:46 品香一郎 阅读(170) 评论(0) 编辑
摘要: 上次去客户服务器上部署系统,在操作EXCEL时候,总是提示“拒绝访问”,也没有抛出异常,但在调试状态是没有问题的,各种配置应用目录下文件的访问权限都不好用经过在web.config配置了下,就好用了,配置如下:    <system.web>    <identity impersonate="true" userName="机器用户名" password...阅读全文
posted @ 2010-05-04 10:33 品香一郎 阅读(122) 评论(0) 编辑
摘要: 如:一个学生的对象类 [Serializable] public class Student { private string name; public string Name { get { return name; } set { name = value; } } /// <summary> /// 序列化成字节流 /// </summary> /// <ret...阅读全文
posted @ 2010-03-19 14:31 品香一郎 阅读(86) 评论(0) 编辑