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)
{
}