如何使用SQL CLR表值函数进行扩展
2007-12-27 15:30:25 来源:WEB开发网部署和调试 GetProximity:
部署使用 Web 服务的表值函数比前一示例要更为复杂。部署使用 Web 服务的表值函数的全部步骤如下:
1.将包含 GetProximity 函数的项目配置为预先生成 XML 序列化程序集。当 .NET Framework 调用 Web 服务时,它会动态生成一个程序集来处理 SOAP XML 的序列化和反序列化。这就出现了一个问题,因为 SQL Server CLR 主机不允许在运行时动态加载程序集。因此,必须在编译时生成 Web 服务调用的 XML 序列化程序集,并向 SQL Server 注册它。若要预先从 Visual Studio 生成此程序集,请从“项目”菜单中,单击“属性”并选择“生成”。将“生成序列化程序集”设置为“开启”。XML 序列化 DLL 随即会随您的项目生成并被添加到 Bin 目录中。其名称为 [ProjectName].XmlSerializers.dll。
2.将 System.Security.AllowPartiallyTrustedCallers 属性添加到该程序集中。此操作可通过在该项目的 AssemblyInfo.cs 中添加以下行来完成:
[assembly: System.Security.AllowPartiallyTrustedCallers]
这样,XML 序列化程序集就可以和包含 GetProximity 函数的主程序集通信。
3.向 SQL Server 注册在步骤 1 中创建的 XML 序列化 DLL。SAFE 权限集就足够了。
4.为包含 GetProximity 表值函数的 DLL 创建一个非对称密钥。
5.为该非对称密钥创建登录信息,并授予它 EXTERNAL ACCESS 权限集。
6.使用 EXTERNAL ACCESS 权限集注册包含 GetProximity 的程序集。
7.注册表值函数 GetProximity。
由于这个依赖关系链相对而言更为冗长和复杂,所以我放弃了 Visual Studio 的部署机制,而选择了作为生成后步骤运行的 Transact-SQL 脚本,它执行部署步骤 3-7。示例项目中包含了该脚本。
赞助商链接