Microsoft Offline Application Block学习笔记(代码)

  public void Run()
  {
   //MOAB初始化
   OfflineBlockBuilder MyOfflineBlockBuilder=OfflineBlockBuilder.Instance;
   //注册离线和在线事件   
   MyOfflineBlockBuilder.ConnectionManager.ConnectionStateChangedEvent +=
    new ConnectionStateChangedEventHandler(
    this.ConnectionManagerConnectionStateChangedEvent);
   //注册错误处理
   FailsafeServiceAgent cuowuChuLi = MyOfflineBlockBuilder.FailsafeServiceAgent;
   cuowuChuLi.ErrorEvent += new MethodExecutionFailureReportEventHandler(FailSafeServiceAgentErrorEvent); 
   
   //启动MOAB
   MyOfflineBlockBuilder.Start();
   //强制上线
   MyOfflineBlockBuilder.ConnectionManager.GoOnline();
   //强制离线
   MyOfflineBlockBuilder.ConnectionManager.GoOffline();

   //发送请求,该请求不返回数据
   string chengxuZuJianMingCheng  = "FPMS_Xiang";
   string wangluoDaiBiaoLeiMing = "JSW.FPMS.Xiang.YeWu.clsWangLuoDaiLi";
   string FangFaMing="FangFaMing";
   string XiangYingHanShu="XiangYingHanShu";
   Guid guid=Guid.NewGuid();
   string GengXinShuJu="GengXinShuJu";
   //程序组件名称
   string onlineProxyAssemblyName = chengxuZuJianMingCheng;
   //网络代表类绝对名称
   string onlineProxyClassName = wangluoDaiBiaoLeiMing;
   //网络代表方法名称
   string onlineProxyMethodName =FangFaMing;
   //业务代表响应方法
   string specificServiceAgentMethodTobeInvoked = XiangYingHanShu;
   OnlineProxyContext onlineProxyMethodContext = new OnlineProxyContext(onlineProxyAssemblyName,
    onlineProxyClassName,
    onlineProxyMethodName);
   ServiceAgentContext specificServiceAgentContext = new ServiceAgentContext(specificServiceAgentMethodTobeInvoked);
    
   Payload messageToEnqueue = new Payload(onlineProxyMethodContext,guid,
    specificServiceAgentContext, GengXinShuJu);
   //数据请求进队列
   MyOfflineBlockBuilder.PayloadConsumer.Enqueue(messageToEnqueue);
  }
  /// <summary>
  /// 需求提交
  /// </summary>
  public Payload XuQiuTiJiao(Payload QingQiu)
  {
   try
   {
    DataSet ShuJu = (DataSet)QingQiu.RequestData;     
    //fuWu.XuQiuTiJiao(ShuJu);
   }
   catch(Exception e)
   {
    //QingQiu.RecordFailure(e);
    
   }
   return QingQiu;
  }
  /// <summary>
  /// 把网络服务中的数据放入请求
  /// </summary>
  /// <param name="ShuJu">网络服务返回的数据</param>
  /// <returns>请求:PlayLoad</returns>
  private Payload QingQiuChuLi(Payload QingQiu,DataSet ShuJu)
  {
   ReferenceCacheDataPayload huanCunQingQiu = QingQiu as ReferenceCacheDataPayload;
   try
   {
    //得到网络服务数据
    huanCunQingQiu.UpdateDataToReturn(ShuJu);
    //得到离线控制实例,操作缓存数据
    OfflineBlockBuilder liXianShiLi = OfflineBlockBuilder.Instance;
    //
    if(!(huanCunQingQiu.IsRefreshMessage() && huanCunQingQiu.DataDefinition.Dirty == true))
    {
     try
     {
      //存数据放入到参考缓存数据块中
      liXianShiLi.ReferenceDataCache.Store(huanCunQingQiu.DataDefinition,
       huanCunQingQiu.Results);
     }
     catch(Exception genException)
     {
      
      throw genException;
     }
    }

    //得到的数据置为干净
    liXianShiLi.ReferenceDataCache.MarkAsClean( huanCunQingQiu.DataDefinition.OriginalKey);

    return huanCunQingQiu; 
   }
   catch(Exception genException)
   {
    //记录错误在请求当中
    huanCunQingQiu.RecordFailure(genException);
    return huanCunQingQiu;
   }

  }
  /// <summary>
  /// 错误处理函数
  /// </summary>
  private void FailSafeServiceAgentErrorEvent(object sender, MethodExecutionFailureReportEventArgs args)
  {
   String cuowuXinXi = "";
   //错误处理
   if(args.Payload.FailureReason.GetType() == typeof(System.Web.Services.Protocols.SoapException))
   {
    
    System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(
     args.Payload.FailureReason.Message,
     "---> ([^:]+):");
   
    if (mc.Count >= 1 && mc[0].Groups[1].Value == "System.Data.DBConcurrencyException")
    {
     cuowuXinXi += "数据同步错误";
    }
   }
   cuowuXinXi += args.Payload.FailureReason.Message;
   //clsRiZhiChuLi.JiLuRiZhi(cuowuXinXi);
   //根据情况,重新发送请求

  }
  /// <summary>
  /// 注册离线和在线事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="args"></param>
  private void ConnectionManagerConnectionStateChangedEvent(object sender,
   ConnectionStateChangedEventArgs args)
  {
   MessageBox.Show("..........."+ args.CurrentState.ToString());
   Microsoft.ApplicationBlocks.SmartClient.Offline.ConnectionState wangluoZhuangTai = args.CurrentState;   
   if(Microsoft.ApplicationBlocks.SmartClient.Offline.ConnectionState.OnLine == wangluoZhuangTai)//已经上线
   {    
    //shifouLianJie = true;
    //开始组件更新
    //this.KaiShiZuJianGengXin();
    
   }
   else//没有上线
   {
    //shifouLianJie = false;    
    //停止组件更新
    //this.TingZhiZuJianGengXin();
    
   }
   //设置界面状态条情况
   //this.jieMian.LianJieZhuangTai(this.shifouLianJie); 
   //设置界面数据更新时钟运行
   //this.jieMian.SheZhiTimer(this.shifouLianJie);

  }
  /// <summary>
  /// 需求查询
  /// </summary>
  public Payload XuQiuChaXun(Payload QingQiu)
  {
   //需求查询
   return QingQiuChuLi(QingQiu,new DataSet());
   
  }
  /// <summary>
  /// 获得基本数据
  /// </summary>
  public Payload HuoDeJiBenShuJu(Payload QingQiu)
  {
   //需求查询
   return QingQiuChuLi(QingQiu,new DataSet());
   
  }

  /// <summary>
  /// 发送请求,该请求返回数据
  /// </summary>
  /// <param name="FangFaMing">要调用的网络代表方法名称</param>   
  /// <param name="XiangYingHanShu">响应请求的方法名称</param>
  /// <param name="ShuJuJianZhi">返回数据的键值</param>
  /// <param name="GuoQiShiJian">过期时间</param>
  private void FaSongQingQiuHuoDeShuJu(string FangFaMing,string XiangYingHanShu,
   int GuoQiShiJian,string ShuJuJianZhi)
  {
   string chengxuZuJianMingCheng="chengxuZuJianMingCheng";
   string wangluoDaiBiaoLeiMing="wangluoDaiBiaoLeiMing";
   string FangFaMing1="FangFaMing";
   string XiangYingHanShu1="XiangYingHanShu";
   int GuoQiShiJian1=1;
   string ShuJuJianZhi1="ShuJuJianZhi";
   Guid guid=Guid.NewGuid();
   //程序组件名称
   string onlineProxyAssemblyName = chengxuZuJianMingCheng;
   //网络代表类绝对名称
   string onlineProxyClassName = wangluoDaiBiaoLeiMing;
   //网络代表方法名称
   string onlineProxyMethodName =FangFaMing1;
   //业务代表响应方法
   string specificServiceAgentMethodTobeInvoked = XiangYingHanShu1;
   //过期时间
   int absoluteExpirationTime = GuoQiShiJian1;
   //数据缓存键值
   string cacheKey = ShuJuJianZhi1;
   
   OnlineProxyContext onlineProxyMethodContext = new OnlineProxyContext(onlineProxyAssemblyName,
    onlineProxyClassName,
    onlineProxyMethodName);

   ServiceAgentContext specificServiceAgentContext = new ServiceAgentContext(
    specificServiceAgentMethodTobeInvoked);
   
   ReferenceDataDefinition refDataDefination = new ReferenceDataDefinition(cacheKey,
    absoluteExpirationTime,
    onlineProxyMethodContext);
   //发送请求
   OfflineBlockBuilder lixianKongZhi=OfflineBlockBuilder.Instance;
   lixianKongZhi.DataLoaderManager.LoadData(guid,
    specificServiceAgentContext,
    refDataDefination);
  }

  /// <summary>
  /// 动态更新程序
  /// </summary>
  public void DownLoadAssembly()
  {
   //获得MUAB
   ApplicationUpdateManager gengXinKongZhi = new ApplicationUpdateManager();
   //开始下载事件
   gengXinKongZhi.DownloadStarted +=new UpdaterActionEventHandler(ChengXuXiaZaiKaiShi);
   //下载文件校验成功事件
   gengXinKongZhi.FilesValidated +=new UpdaterActionEventHandler(ChengXuWenJianKeYiYunXing);
   //检测到新版本的事件
   gengXinKongZhi.UpdateAvailable +=new UpdaterActionEventHandler(ChengXuZuJianKeYiXiaZai );
   //下载完成后事件
   gengXinKongZhi.DownloadCompleted +=new UpdaterActionEventHandler(ChengXuXiaZaiWanCheng);


   //启动组件更新
   gengXinKongZhi.StartUpdater();
   //停止组件更新服务
   gengXinKongZhi.StopUpdater();
  }
  /// <summary>
  /// 程序下载更新
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void ChengXuXiaZaiKaiShi(object sender,UpdaterActionEventArgs e)
  {

  }
  /// <summary>
  /// 下载文件校验成功事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void ChengXuWenJianKeYiYunXing(object sender,UpdaterActionEventArgs e)
  {

  }
  /// <summary>
  /// 检测到新版本的事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void ChengXuZuJianKeYiXiaZai(object sender,UpdaterActionEventArgs e)
  {

  }
  /// <summary>
  /// 下载完成后事件
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void ChengXuXiaZaiWanCheng(object sender,UpdaterActionEventArgs e)
  {

  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值