CSharp Silverlight DataSnap Mobile Connector入门

来自RAD Studio
跳转到:航行搜索

转到DataSnap Mobile Connectors入门


本主题是生成和使用C#Silverlight DataSnap代理,用于Windows Phone 7移动开发。C#Silverlight代理支持DataSnap本身支持的所有相同数据类型。已经创建了特殊的C#类来包装这些DBX和Delphi类型,它们的用法与Delphi中的用法类似。

当请求时,DataSnap REST服务器生成并分派用于调用服务器上方法的代理类。这与您可能已经熟悉的代理生成非常相似,但也包括压缩代理和所有依赖项,并将此压缩文件发送给请求者的过程。

有关此过程的更多信息,请参阅DataSnap Mobile Connectors入门.

如何从DataSnap REST服务器下载C#Silverlight代理文件

首先,您需要获得Win32ProxyDownloader.exe,在中提供\垃圾箱产品安装目录。此文件以及从何处获取副本将在中进一步讨论DataSnap Mobile Connectors入门.

下载程序是一个简单的实用程序,可以帮助向服务器请求代理和与服务器通信所需的其他文件。

要使用代理下载程序,您需要提供以下参数:

  • -语言(必填):指定所请求代理的移动平台和语言。对于Windows Phone 7,请使用csharp_silverlight.
  • -协议:指定要使用的连接协议:http或https。默认为http。
  • -主持人:指定要连接的端口和主机名或IP地址。默认值为带有端口80的localhost。要指定不同的名称或端口,请使用端口号完全限定名称,并用冒号(“:”)分隔
  • -输出:指定要将代理文件下载到的文件夹。如果未指定,则使用当前文件夹。

以下是使用上述大多数参数的示例:

C: \Win32ProxyDownloader.exe-语言csharp_silverlight-主机127.0.0.1:8080-输出C:\test

执行下载程序后,C#Silverlight代理文件将复制到指定的输出文件夹中。这些文件包括以下内容:

  • JSON解析dll
  • 代理所需的静态C#源文件
  • DSProxy.cs,生成的代理

主文件是DS代理.cs,它声明包含服务器上定义的所有方法的类。

如何使用DSProxy类

下面的代码显示了DS代理.cs服务器生成的(C#)文件。它包含一个T服务器方法1类,它封装了服务器方法。服务器只有一个方法(回声字符串),C#类TServerMethods1适当地实现了它。代理生成器已自动生成连接到服务器和执行方法的所有代码。请参阅的C#代码回声字符串方法如下:

使用 系统;
使用 系统。螺纹加工;

命名空间 恩巴卡迪罗。数据快照。Windows电话7
{
  公众的  DS代理
  {
    公众的  T服务器方法1 : DSAdmin公司
    {
      公众的 T服务器方法1(DSREST连接 连接 异常回调 ExCal公司) : 基础(连接 ExCal公司)
      {
      }

      私有的 DSREST参数元数据[] T服务器方法1_EchoString_元数据;
      私有的 DSREST参数元数据[] 获取服务器方法1_EchoString_元数据() {
        如果 (T服务器方法1_EchoString_元数据 == 无效的) {
          T服务器方法1_EchoString_元数据 = 新的 DSREST参数元数据[] {
              新的 DSREST参数元数据(“价值” DSREST参数方向.输入 
                                                    数据库数据类型.宽字符串类型 “字符串”),
              新的 DSREST参数元数据("" DSREStParam方向.返回值 
                                              DBX数据类型.宽字符串类型 “字符串”),
          };
        }
        返回 T服务器方法1_EchoString_元数据;
      }

      /**
*@param Value[in]-在服务器上键入:string
*@return result-在服务器上键入:string
*/
      公众的 代表 空隙 回声字符串回调(字符串 结果);

      公众的 空隙 回声字符串(字符串 价值 EchoString回调 回调 = 无效的 异常回调 ExCal公司 = 无效的)
      {
        DSREST命令 cmd公司 = 获取连接().创建命令();
        cmd公司.设置请求类型(DSHTTP请求类型.GET(获取));
        cmd公司.设置文本(“TServerMethods1.EchoString”);
        cmd公司.准备(获取服务器方法1_EchoString_元数据());
        内部连接代表 回声字符串删除 = () => {
          如果 (回调 != 无效的) {
            尝试 {
              回调.动态调用(cmd公司.getParameter(获取参数)(1).获取价值().获取字符串());
            } 抓住 (例外 前任) {
              如果 (ExCal公司 != 无效的) 
                获取连接().syncContext(同步上下文).发送(新的 发送或后回拨(x个 => 
                   ExCal公司.动态调用(前任.内部异常)), 无效的);
              其他的 
                获取连接().同步上下文.发送(新的 发送或后回拨(x个 => 
                  基本ExCal.动态调用(前任.内部异常)), 无效的);
            }
          }
        };
        cmd公司.getParameter(获取参数)(0).获取价值().设置为字符串(价值);
        获取连接().执行(cmd公司  回声字符串删除 ExCal公司);
      }
    }
  }
}

使用代理类的第一步是创建和设置到服务器的连接。等级DSREST连接封装连接到服务器所需的所有属性和方法。只需创建连接并设置属性,如下所示:

DSREST连接 连接 = 新的 DSREST连接();
连接.setHost(设置主机)(“主机名”);
连接.设置端口(端口号);
连接.set协议(“http”);
  • 这个主办属性指定主机名或IP地址。
  • 这个港口属性指定服务器正在侦听的端口。
  • 这个协议属性指定用于连接的协议。具体来说:http或https。

要远程调用服务器方法,只需创建代理类,传递连接,然后调用方法:

DSREST连接 连接 = 新的 DSREST连接();
连接.setHost(设置主机)(“本地主机”);
连接.设置端口(8080);
连接.set协议(“http”);

DS代理.T服务器方法1 代理 = 新的 DS代理. T服务器方法1(连接 异常回调);

代理.回声字符串(“测试字符串” (字符串 结果) =>
{
   // ...
}, 异常回调);

公众的 空隙 异常回调(例外 e(电子))
{
   // ...
}

带有var参数的服务器方法示例

下面的示例是当服务器方法包含var参数或返回多个结果时生成的代码。这是服务器方法的Delphi代码:

功能 T服务器方法1.VarParam测试(无功功率,无功功率 价值: 一串): 一串;
开始
  价值 := 结构实用程序.反向字符串(价值);
  结果 := 价值;
结束;

下面是生成的用于调用该服务器方法的代理代码:

私有的 DSREST参数元数据[] TServerMethods1_VarParam测试元数据;
私有的 DSREST参数元数据[] 获取服务器方法_参数测试_元数据()
{
  如果 (TServerMethods1_VarParam测试元数据 == 无效的) {
    TServerMethods1_VarParam测试元数据 = 新的 DSREST参数元数据[] {
      新的 DSREST参数元数据(“价值” DSREST参数方向.输入输出 
                                           DBX数据类型.宽字符串类型 “字符串”),
      新的 DSREST参数元数据("" DSREST参数方向.返回值 
                                     DBX数据类型.宽字符串类型 “字符串”),
    };
  }
  返回 TServerMethods1_VarParam测试元数据;
}

/**
 * @参数 价值 [在里面/外面的] - 类型  服务器: 一串

请注意,该方法返回VarParamTest返回。这个特殊类包含以下信息无功功率,无功功率(输入/输出)参数以及结果。以下示例显示了如何调用该方法并读取结果值:

代理. 变量参数测试 (“你好,世界!” 
  (DS代理.TServer方法1.VarParamTest返回 结果) => {
     调试.WriteLine(写入行)(结果.价值);
     调试.WriteLine(写入行)(结果.returnValue(返回值));
  }
);

传入参数的新值和结果值都由result实例持有。Result的值。值为“!dlroW,olleH”,Result.returnValue为“Hello,World!”。

如何使用重量级回调

重量级回调为DataSnap Server提供了一种向REST客户端发送几乎即时通知的方法。客户机可以在感兴趣的服务器上注册特定主题的回调,然后每当更新该主题时,客户机都会收到通知。当然,这是对重量级回调所完成任务的一个非常简单的描述,但对于本文档的目的来说应该足够了。

在应用程序中使用回调的第一步是创建从抽象继承的自定义回调类DBX回调类并重写抽象的“Execute”方法。以下是此类的示例实现:

公众的  我的回叫 : DBX回调 {
  公众的 覆盖 TJSON值 执行(TJSONArray(TJSON数组) 参数) {
    调试.WriteLine(写入行)(参数.ToString(目标字符串)());
    返回 新的 TJSON真();
  }
}

这个DSClientCallback频道管理器类管理客户端的回调。它提供了注册和注销回调以及关闭其中一个或全部回调的方法。

的构造函数DSClientCallback频道管理器接受3个参数:

  1. DSREST连接,指定服务器连接信息
  2. 包含要注册的服务器通道名称的字符串
  3. 包含管理器ID的字符串(服务器独有)
DSCallback频道管理器 mngr公司 = 
    新的 DSCallback频道管理器(连接 “chname” DSCallback频道管理器.获取新管理器ID());

以下是注册回调然后广播到注册回调的同一频道的示例:


公众的 空隙 测试回调(){

       DSAdmin公司 管理员 = 新的 DSAdmin公司(连接 管理异常回调);
   mngr公司 = 新的 DSCallback频道管理器(连接“chname”DSCallback频道管理器.获取新经理ID());
   mngr公司.寄存器回调(“mycb01” 新的 我的回叫(), () =>
   {
	管理员.广播到频道(“chname” 新的 TJSONString(TJSON字符串)(“这是一个广播”),(布尔 b条) =>
        {
          mngr公司.关闭客户端频道();
        });  

}

公众的 空隙 管理异常回调(例外 e(电子))
{
   // ...
}

“registerCallback”方法的第一个参数是回调的ID(客户端通道唯一的ID)。第二个参数是要注册的实际回调实例,第三个参数是注册完成时要调用的委托方法。

上面的代码正在注册我的回叫类,它正在侦听chname公司频道。注册成功后,客户端调用广播到频道,将字符串“This is a broadcast”发送给正在“chname”频道上侦听的所有回调(包括其本身)

的第三个参数广播到频道call是一个委托,当调用从服务器返回时,它会被调用,其中包含一个布尔值,用于说明服务器是否成功处理了广播请求。然后,在这个嵌套委托声明中,上述代码关闭通道管理器,以便不再接收广播。

另请参见