SQLSERVER环境下调用包含webservice引用的.net类库

最近做到一个项目,涉及到系统的集成。对于SSO单点登陆已经解决,但紧接着一个难点便是两个系统中基础数据的同步。项目情况大致如下:

系统AB都是采用SQLSERVER 2005 数据库的B/S系统。系统A的数据库中数据未加密,系统B的数据库中数据为加密数据,且因商业合同关系,不能对B数据库进行任何直接操作。系统B提供有相应的webservice,可以用来同步基础数据。

为了解决这个问题,初步想法是将自动同步交给数据库来完成,小批量的数据修改、添加使用触发器,大量的修改、添加使用中间表和作业调度。

但这样做的难点就是如果调用webservice。在网上粗略浏览了一下资料,基本上是SQLSERVER调用类库的思路,这个和我之前做的一个数据加密项目类似,唯一不同的是以前的类库中没有webservice。

既然思路是对的,那么就开始动手。

1、先是利用VS2005创建了一个类库解决方案

2、引用要用到的webservice

3、在类文件中建立UserSynchronization和DepSynchronization类,分别用于同步用户和部门机构。

为了方便数据库调用,两个类的方法均为static,且每个类只提供一个主调用方法。以DepSynchronization类为例,供数据库调用的方法如下:

public static string OperateDepart(string OperateKind, string user, string pwd, string code, string depName,string schoolName)
        {
            switch (OperateKind)
            {
                case "UpdateByCode":
                    return UpdateByCode(user,pwd,code,depName);
                    break;
                case "DeleteByCode":
                    return DeleteByCode(user, pwd, code);
                    break;
                case "Creater":
                    return Creater(user, pwd, code, depName, schoolName);
                    break;
                case "Start":
                    return EnableByCode(user, pwd, code, true);
                    break;
                case "End":
                    return EnableByCode(user, pwd, code, false);
                    break;
                
            }
            return "Wrong";
        }

4、编译类库,在release下,生成了四个文件,其中有两个是DLL文件。

5、数据库中注册类,并映射调用函数。

CREATE ASSEMBLY [SeeyonAppCustomBySZ]
FROM 'C:\DllForSqlServer\AppCustomBySZ\AppCustomBySZ.dll'
WITH PERMISSION_SET = UNSAFE 
--
CREATE FUNCTION [dbo].[SeeyonOperateDepart] (@OperateKind nvarchar(30),
@user nvarchar(30),
@pwd nvarchar(50),
@code nvarchar(50),
@depName nvarchar(500),
@schoolName nvarchar(50))
RETURNS nvarchar(1000) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [AppCustomBySZ].[AppCustomBySZ.DepSynchronization].[OperateDepart]

在映射函数时出了一个问题,起初我将数据库函数的参数类型设为了varchar,引发了SQL-CLR类型不匹配,原来在C#中的string类型映射过来应该是nvarchar。另外提一下,bool映射到SQLSERVER2005应该是bit。

6、测试:

select dbo.OperateDepart('Creater','admin','76576364','TEST2014','测试部门');

系统报错:

Cannot load dynamically generated serialization assembly. 
In some hosting environments assembly load functionality is restricted, 
consider using pre-generated serializer. 
Please see inner exception for more information.


搜索相关资料后发现,编译时生成的另一个DLL文件,***.XmlSerializers.dll,是用来序列化和反序列化webservice引用的,必须注册到SQLSERVER。在可编程性-程序集中右键-新建程序集,将这个类注册。

7、再次测试OK

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值