RO41 – 修改标准的.NET事件处理支持RemObjects SDK

 
RO41 – 修改标准的 .NET 事件处理支持 RemObjects SDKRO41 – 修改标准的.NET事件处理支持RemObjects SDK_第1张图片
本文描述如何将一个标准的 c# 应用程序转换为 RemObjects SDK ( 简称 RO) 服务 . 在此基础上可以轻松的在你的机器上运行一个客户端连接到服务读取数据 .
本文主要提供如下内容 :
  • 本地应用程序: 描述将要更改的应用程序
  • 如何转换:需要做的工作
  • 接下来做什么?: 一些有用的参考
本地应用程序
为了简单 , 我们使用一个可以从特定目录中取得文件列表的应用程序 . 我们的所有逻辑都在 FS 类中 . 这里我们有一个 FSItem 结构 , 可以获取文件或目录信息 :
public class FSItem
{
         private bool _isFolder;
         private string _name;
         public long _size;
 
         public bool IsFolder
         {
                 get { return _isFolder; }
                 set { _isFolder = value; }
         }
         public string Name
         {
                 get { return _name; }
                 set { _name = value; }
         }
         public long Size
         {
                 get { return _size; }
                 set { _size = value; }
         }
}
其中也包含新的方法 : getFolders, getFiles getFoldersAndFiles. 每个方法都可以读取目录并返回一个 FSItem 对象集合 . 这里是 getFiles 的实现 :
public static FSItem[] getFiles(string folderName)
{
         System.Collections.ArrayList res = new System.Collections.ArrayList();
         DirectoryInfo di = new DirectoryInfo(folderName);
         if (!di.Exists) return new FSItem[ 0 ];
         #region Get Files...
         FileInfo[] files = di.GetFiles();
         for (int i = 0 ; i < files.Length; i++)
         {
                 FSItem item = new FSItem();
                 item.IsFolder = false;
                 item.Name = files[i].FullName;
                 item.Size = files[i].Length;
                 res.Add(item);
         }
         #endregion
         return (res.ToArray(typeof(FSItem)) as FSItem[]);
}
我们的主窗体可以调用这些方法并在控件中显示数据 :
private void btnGetFiles_Click(object sender, System.EventArgs e)
{
         listBox1.Items.Clear();
         FS.FSItem[] items = FS.getFiles(@ "C:/");
         for (int i = 0 ; i < items.Length; i++)
         listBox1.Items.Add(items[i].Name);
}
用户界面如图 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第2张图片
如何转换
转换这样的应用程序到 RO 需要如下步骤 :
1) 基于 RO WindowsFormsServer 模板创建一个项目 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第3张图片
2) 做如下配置 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第4张图片
3) 打开 Service Builder 并加入保存文件信息的结构 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第5张图片
4) 增加一个 FSItem 的数组结构 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第6张图片
5) 现在我们设置创建服务方法 . 我们创建三个方法 : getFolders, getFiles getFoldersAndFiles. 它们需要 folderName (string) 参数并返回我们定义的 FSItem 数组 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第7张图片
6) 验证我们的库 ( 点击 Validate 按钮 ) 如果一切 OK, 关闭它 . 接口创建完毕 .
7) 现在打开 ROGetFilesService_Impl.cs 文件并实现我们的方法 . 注意我们只需要在第一个应用程序中将其中的函数实现拷贝过来或做少许修改即可 . 例如 , getFiles 方法的实现是完全相同的 .
8) 最后在客户端调用服务 . 我们到客户端的主窗体做如下修改 :
...
private ROGetFiles.IROGetFilesService service;
public Form1()
{
 InitializeComponent();
 service = ROGetFiles.CoROGetFilesService.Create(message, clientChannel);
}
private void btnGetFiles_Click(object sender, System.EventArgs e)
{
 listBox1.Items.Clear();
 ROGetFiles.FSItem[] items = service.getFiles(@ "C:/");
  for (int i = 0 ; i < items.Length; i++)
    listBox1.Items.Add(items[i].Name);
}
...
现在我们拥有的 RO 服务端和客户端运行如下 :
RO41 – 修改标准的.NET事件处理支持RemObjects SDK_第8张图片
 
最后我们需要配置客户端通道连接到远程计算机 . 配置依赖于我们使用的不同客户端通道类型 :
  • IpHttpClientChannelWinInetHttpClientChannel:设置TargetUrl 属性为http://[ServerHostName]:[Port]/[Dispatcher] ( "http://MyServer1:8099/bin")
  • IpTcpClientChannel SuperTcpClientChannel:设置Hostname(主机命)Port(端口)属性.
现在我们启动客户端并连接到运行在其它计算机上的服务 . 从而我们也可以获取远程机器的文件系统及其文件列表 ( 当然服从文件访问许可 ).
接下来做什么 ?
本文中我们介绍了非常简单的范例 . 你可以在 RemObjects SDK 自带的范例中找到更繁琐的 FileTransfer 范例 . 这里也是使用同样的方式 , 范例支持对远程文件系统的导航并可以在客户端下载任意文件 .
 

你可能感兴趣的:(.net,String,object,service,C#,Class)