使用 .NET 实现同步脚本时,必须告知 MobiLink 在何处可以找到程序集中包含的程序包、类和方法。
创建自己的类。为每个所需的同步事件编写方法。这些方法必须是公共的。
有关这些方法的详细信息,请参见方法。
每个包含非静态方法的类都应有一个公共的构造函数。在第一次调用每个类中的方法进行连接时,MobiLink 服务器将自动实例化每一个类。
请参见构造函数。
创建一个或多个程序集。编译时可引用 iAnywhere.MobiLink.Script.dll,它包含将要在您自己的 .NET 方法中使用的 MobiLink 服务器 API 类存储库。iAnywhere.MobiLink.Script.dll 位于 %SQLANY12%\Assembly\V2 中。
您可以在命令行中编译类,也可以使用 Visual Studio 或其它 .NET 开发环境编译类。
编译您的项目。
例如,在 Visual Studio 中进行编译,如下所示:
在 [VS.NET Project] 菜单中,单击 [Add Existing Item]。
定位 iAnywhere.MobiLink.Script.dll。
在 [Open] 列表中,单击 [Link File]。
对于 Visual Studio,请始终使用 [Link File] 方法。请不要使用 [Add Reference] 选项来引用 iAnywhere.MobiLink.Script.dll。[Add Reference] 选项将复制与类程序集位于同一物理目录的 iAnywhere.MobiLink.Script.dll,这会导致 MobiLink 服务器出现问题。
使用 [Build] 菜单生成程序集。
还可以从命令行进行编译,方式如下:
将 dll-path 替换为 iAnywhere.MobiLink.Script.dll 的路径。例如,在 C# 中:
csc /out:dll-pathout.dll /target:library /reference:dll-pathiAnywhere.MobiLink.Script.dll sync_v1.cs |
在统一数据库的 MobiLink 系统表中,为每个同步脚本指定要调用的程序包、类和方法的名称。每个脚本版本中只允许存在一个类。
例如,可以通过使用 ml_add_dnet_connection_script 存储过程或 ml_add_dnet_table_script 存储过程,将此信息添加到 MobiLink 系统表中。如果在 SQL Anywhere 数据库中运行以下 SQL 语句,则这些语句将指定只要发生 authenticate_user 连接级别事件,即运行 myNamespace.myClass.myMethod。
CALL ml_add_dnet_connection_script( 'version1', 'authenticate_user', 'myNamespace.myClass.myMethod' ) |
完全限定的方法名称区分大小写。
作为此过程调用的结果,ml_script 系统表的 script_language 列包含单词 dnet。脚本列包含公共 .NET 方法的限定名称。
请参见ml_add_dnet_connection_script 系统过程和ml_add_dnet_table_script 系统过程。
您也可以使用 Sybase Central 添加此信息。
请参见添加和删除脚本。
指示 MobiLink 服务器装载程序集并启动 CLR。可以使用 mlsrv12 命令行选项告知 MobiLink 在何处找到这些程序集。有两个选项可以选择:
使用 -sl dnet ( -MLAutoLoadPath ) 此选项将给定路径设置为应用程序基目录,并装载该目录下的所有专用程序集。这通常为首选选项。例如,要装载位于 dll-path 下的所有程序集,请输入:
mlsrv12 -c "DSN=consolidated1" -sl dnet(-MLAutoLoadPath=dll-path) |
如果使用 -MLAutoLoadPath 选项,则在输入事件脚本的完全限定方法名时不能指定域。
使用 -sl dnet ( -MLDomConfigFile ) 此选项需要一个包含域和程序集设置的配置文件。您可在以下情况下使用此选项:当您具有共享程序集时,当您不想装载目录中的所有程序集时,或者当您出于某种其它原因需要使用配置文件时。
有关装载共享程序集的详细信息,请参见.NET 程序集装载。
有关 mlsrv12 选项 -sl dnet 的详细信息,请参见-sl dnet mlsrv12 选项。
可以使用 -MLAutoLoadPath 选项,也可以使用 -MLDomConfigFile 选项,但二者不可同时使用。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |