[DoNet]模拟域用户进行操作

三 17th, 2011

今天在部署WCF服务碰到一个十分诡异的问题,问题描叙如下:

我们有一天单独的数据库服务器,该数据库服务器是采用windows身份验证,但我们用代码调用该数据库服务时,会出现一个错误,Login failed for user ‘*/Administrator$’….

起初我认为可能是WCF的配置出现了问题,但是仔细一想,WCF服务可以通过IE访问,也就表明我服务创建是成功的,也就是说WCF服务不存在问题,问题出在调用的过程中,也就是在数据库操作中出现了问题,要验证这一点也不难,打开WCFTestClient,执行一次操作,然后查看返回的错误信息。

确定问题之后,就比较容易了,我们利用windows身份验证的,实际上是使用当前你说登录机器的一些信息,而问题的出现是因为我使用WCF服务器A上有很多的域用户。 该服务去调用数据库服务器B利用的用户会默认认为是“域/机器名” ,所以当你操作数据库时,没法识别该用户,就会发生上面的错误。

解决办法可能有很多种,但是由于我不能擅自去操作服务器上的一些配置,所以我只能从代码的角度去考虑这个问题。

我但是想到一种方式就是能不能自己将用户的信息模拟出来,让WCF的服务默认是在特定的用户下操作。

通过查些资料,写了一个模拟类:

P/Invoke 代码

模拟操作的实现代码:

模拟操作的实现代码

但这个模拟操作类完成之后,你在你需要用到数据库操作前,调用ImpersonateUser方法即可。





除非注明,本站文章均为原创。本文基于 BY-NC-SA 协议进行授权,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 metaboy(包含链接).

本文链接地址: http://blog.wangyuxiong.com/archives/51096

订阅本站:http://www.wangyuxiong.com/feed

分类: 语言编程         标签: , ,
目前还没有任何评论.

无觅相关文章插件,快速提升流量