阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

老司机
查看: 5484|回复: 9

[求助] RTX 第三方认证 熟悉C#的进来帮忙

[复制链接]
  • TA的每日心情
    开心
    2021-4-8 10:07
  • 签到天数: 237 天

    [LV.7]常住居民III

    发表于 2010-11-8 22:13:02 | 显示全部楼层 |阅读模式
    本帖最后由 dashezhi 于 2010-11-8 22:20 编辑

    我现在想把RTX的第三方认证应用做成windows系统服务,随机启动...这里我的RTX用户是通过域来进行身份验证的,也就是说在RTX登陆客户端直接输入域用户名及密码进行登陆...当然我事先已经做好二者的用户同步了..
    现在遇到一个问题,就是我把相应功能的服务建立并启动好之后,再打开RTX客户端登陆的时候无论输入什么密码都提示密码错误,无法登陆....
    而最令人不解的是,我用同样的代码写成winform程序,却能正常的进行域用户验证!!!
    下面是我生成windows服务程序的代码..有熟悉的人帮我看看呐..万分感谢!!!
    代码在这里好像不太直观..请朋友们把代码复制过去放到文本文档里看吧,那样好看一点..

    1. namespace WindowsService1
    2. {
    3.     public partial class RTXThirdAuth : ServiceBase
    4.     {
    5.         
    6.         public RTXSAPIRootObj rootObj;                 //声明根对象
    7.         public RTXSAPIUserAuthObj rtxUserAuth;    //用户认证对象
    8.         public RTXThirdAuth()
    9.         {
    10.             InitializeComponent();
    11.             
    12.             rootObj = new RTXSAPIRootObj();
    13.             rootObj.ServerIP = "10.1.6.2";            //这是我RTX服务器地址
    14.             rootObj.ServerPort = 8006;                //端口
    15.             rtxUserAuth = rootObj.UserAuthObj;
    16.             rtxUserAuth.AppGUID = "{7D37D232-35EA-43B7-B2EF-CEE88D9C50D4}";
    17.             rtxUserAuth.AppName = "RTXThirdAuth";
    18.             rtxUserAuth.OnRecvUserAuthRequest += new _IRTXSAPIUserAuthObjEvents_OnRecvUserAuthRequestEventHandler(rtxUserAuth_OnRecvUserAuthRequest);
    19.         }
    20.         public void rtxUserAuth_OnRecvUserAuthRequest(string bstrUserName, string bstrPwd, out RTXSAPI_USERAUTH_RESULT pResult)
    21.         //RTX用户登陆时触发的事件
    22.         {
    23.             DirectoryEntry adEnt = new DirectoryEntry(LDAP://10.1.6.1/OU=Accounts,DC=test,DC=local);
    24.             //这是我的域地址,我的用户都在 test.local/Accounts 组织单位下面
    25.             adEnt.Username = bstrUserName;
    26.             adEnt.Password = bstrPwd;
    27.             adEnt.AuthenticationType = AuthenticationTypes.Secure;
    28.             adEnt.UsePropertyCache = true;
    29.             DirectorySearcher adSearch = new DirectorySearcher(adEnt);
    30.             adSearch.Filter = "(objectClass=user)";
    31.             //过滤查找test.local/Accounts 组织单位下面的全部域用户信息
    32.             try
    33.             {
    34.                 SearchResultCollection resCol = adSearch.FindAll();
    35.                 //查找全部域用户信息,如果这里抛出异常则说明上面传入的bstrUserName用户名 与 bstrPwd密码 不正常,理应认证失败,否则认证成功.
    36.                 if (resCol.Count > 0)
    37.                     pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_OK;
    38.                 else
    39.                     pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_ERRPWD;
    40.                 resCol.Dispose();
    41.             }
    42.             catch (COMException ex)
    43.             {
    44.                 pResult = RTXSAPI_USERAUTH_RESULT.RTXSAPI_USERAUTH_RESULT_ERRPWD;
    45.             }
    46.             finally
    47.             {
    48.                 adSearch.Dispose();
    49.                 adEnt.Dispose();
    50.             }
    51.         }
    52.         protected override void OnStart(string[] args)  //重写服务启动事件
    53.         {
    54.             rtxUserAuth.RegisterApp();
    55.             rtxUserAuth.StartApp("", 4);
    56.         }
    57.         protected override void OnStop()     //重写服务停止事件
    58.         {
    59.             rtxUserAuth.StopApp();
    60.             rtxUserAuth.UnRegisterApp();
    61.         }
    62.     }
    63. }
    复制代码
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2021-4-8 10:07
  • 签到天数: 237 天

    [LV.7]常住居民III

     楼主| 发表于 2010-11-8 22:28:01 | 显示全部楼层
    总之如果做成winform就一点问题都没有,做成系统服务就不行,怎么样都没法正常认证,两边的代码都是一样的...不知道问题出在哪里..

    dashezhi 于 2010-11-9 16:30 补充以下内容

    晕死,居然没人帮忙,我自己搞定了!!!
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2015-12-3 10:57
  • 签到天数: 644 天

    [LV.9]以坛为家II

    发表于 2010-11-11 13:35:25 | 显示全部楼层
    楼主真厉害啊,搞定也分享下方法吧
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    昨天 13:56
  • 签到天数: 418 天

    [LV.9]以坛为家II

    发表于 2010-11-11 13:58:43 | 显示全部楼层
    解决了就把问题设置为已解决呀,本来还想进来看看是否能帮到。
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2021-4-8 10:07
  • 签到天数: 237 天

    [LV.7]常住居民III

     楼主| 发表于 2010-11-12 08:04:57 | 显示全部楼层
    帖子不能编辑了,没法改噢
    我说一下问题出在哪里吧
    上面的代码都是正确的,问题出在建立系统服务的时候,服务的登陆类型要设置成网络服务或者本地用户
    如果设置成本地系统或者系统服务就不行....关于这点我也有点搞不清楚为什么..还请高人解答.
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    慵懒
    2024-3-26 22:18
  • 签到天数: 149 天

    [LV.7]常住居民III

    发表于 2010-12-26 18:14:26 | 显示全部楼层
    看不明白..楼主强人...不过你的图片好像在哪里看过.
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2011-2-24 09:02
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    发表于 2011-2-22 21:04:54 | 显示全部楼层
    本地系统或者系统服务 需要登录才运行服务。
    网络服务 不需要用户登录,默认运行该服务。
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2011-7-22 09:09:43 | 显示全部楼层
    写成后台服务需要用户验证吧,后台服务可以是system
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2015-4-14 16:22:24 | 显示全部楼层
    楼主,我在做RTX与openldap的集成,有些问题不太清楚,想请教您一下,能给留个联系方式吗
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    郁闷
    2015-4-14 18:26
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2015-4-14 18:38:13 | 显示全部楼层
    感觉很高深的问题,看看能否解决掉
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表