引用空间
using Microsoft.Win32;
using System.IO;
public bool ExistsRegedit()
{
bool ifused = false;
RegistryKey rk = Registry.LocalMachine;
RegistryKey akey = rk.OpenSubKey(@"SOFTWARE\\Microsoft\\Office\\11.0\\Word\\InstallRoot\\");
RegistryKey akeytwo = rk.OpenSubKey(@"SOFTWARE\\Microsoft\\Office\\12.0\\Word\\InstallRoot\\");
//检查本机是否安装Office2003
if (akey != null)
{
string file03 = akey.GetValue("Path").ToString();
if (File.Exists(file03 + "Excel.exe"))
{
ifused = true;
}
}
//检查本机是否安装Office2007
if (akeytwo != null)
{
string file07 = akeytwo.GetValue("Path").ToString();
if (File.Exists(file07 + "Excel.exe"))
{
ifused = true;
}
}
return ifused;
}
转
本文链接
涉及到的技术概念 WCF,REST,AJAX,JSON
遇到的问题:前台页面使用ajax请求后台rest服务,get请求没有问题,post请求时,后台接收参数总是null
rest方法属性,请求参数和返回参数都是json格式
/// <summary>
/// 创建数据库配置
/// </summary>
/// <param name="connectionconfig">connectionconfig表实体</param>
/// <returns>返回受影响行数</returns>
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "CreateConnectionConfig", BodyStyle = WebMessageBodyStyle.Wrapped,RequestFormat=WebMessageFormat.Json,ResponseFormat=WebMessageFormat.Json)]
public bool CreateConnectionConfig(ConnectionConfig connectionConfig)
{
...
}
#endregion
chome控制台的调试结果
问题表现在 connectionconfig接收值总是null
如果修改信息风格为bare
connectionconfig不是null但是其属性是null
最终的解决方法:
将json值得connectionconfig 与rest方法的参数名称connectionConfig一致,主要是大小写一致
后台就不会出现null值
原因不详
本文链接
在上篇随笔《Winform开发框架之通用定时服务管理》介绍了我的框架体系中,通用定时服务管理模块的设计以及一些相关功能的展示。我们在做项目的时候,或多或少需要和其他外部系统或者接口进行数据交互,有些是单向的获取,有些是双向的操作。这个定时操作(可能是间隔的时间,也可以能是定在某一个时刻,也可以能是让它在某天某时刻运行),那么这就需要定时服务程序来管理了,通常我们把他寄宿在Windows服务里面(这也是一种最佳的方式),这种方式最好的地方,就是它的生命周期可以随着电脑的启动而启动,而且很少需要用户干预。
1、通用定时服务管理模块框架设计
首先我们回顾一下上面文章对通用定时服务管理模块的设计思路。
整个定时服务的插件设计框架如下所示。
Windows定时服务-文件视图如下所示:
2、如何进行定时服务应用的开发
虽然看起来还是有那么几个文件,其实由于是整个框架是基于插件式的架构,因此但我们开发定时服务应用的时候(如最底下的有黑框的部分),只需要引用插件模块WHC.MyTimingPlugIn.dll并实现ITimingPlugIn接口即可,如上面的WarningService.dll就是一个典型的例子。
这个WarningService项目就是一个很好的测试例子,它只有一个类,类实现接口ITimingPlugIn。
{
#region ITimingPlugIn 成员
/// <summary>
/// 操作进度状态事件
/// </summary>
public event ProgressChangedEventHandler ProgressChanged;
public bool Excute()
{
Thread.Sleep(1000);
if (ProgressChanged != null)
{
ProgressChanged(this, new ProgressChangedEventArgs(20, "操作进行中...20%"));
}
//实际工作处理1
Thread.Sleep(1000);
if (ProgressChanged != null)
{
ProgressChanged(this, new ProgressChangedEventArgs(50, "操作进行中...50%"));
}
//实际工作处理2
Thread.Sleep(1000);
if (ProgressChanged != null)
{
ProgressChanged(this, new ProgressChangedEventArgs(80, "操作进行中...80%"));
}
//实际工作处理3:输出内容,作为处理的记录
LogTextHelper.WriteLine(string.Format("{0}......{1}", this.Name, DateTime.Now));
Thread.Sleep(1000);
if (ProgressChanged != null)
{
ProgressChanged(this, new ProgressChangedEventArgs(100, "操作完成"));
}
return true;
}
/// <summary>
/// 插件程序名称
/// </summary>
public string Name
{
get;
set;
}
/// <summary>
/// 插件详细配置
/// </summary>
public PlugInSetting Setting
{
get;
set;
}
#endregion
}
开发编译通过后,我们需要为该定时服务应用,在插件XML配置上增加一个这样的说明,让服务程序能够正常加载并识别。
<ArrayOfPlugInSetting>
<PlugInSetting>
<!--插件程序名称-->
<Name>测试名称</Name>
<!--插件描述内容-->
<Description>测试描述</Description>
<!--运行同步服务的间隔时间(单位:分钟)-->
<ServiceCycleMinutes>