protected void Button2_Click(object sender, EventArgs e)
    {
        //判断用户名和密码
        string userName = TextBox1.Text.Trim();        bool bRet = RtxLogin.IsUserExisted(userName);  //这个函数另见RtxLogin.cs源文件        if (false == bRet)
        {
            Response.Write("用户不存在");
            return;
        }        string SessionKey = RtxLogin.GetSessionKey(userName);  //这个函数另见RtxLogin类        string severip = txtServerIP.Text;  //RTX服务器IP地址
        short serverport = Convert.ToInt16(txtAppServerPort.Text);//RTX服务器端口,8000;         RtxLogin.SessionKeyLogin(severip, serverport, userName, SessionKey);        //用Response对象实现RX客户端登录并打开一个新的页面(登录代码有可能改进)
        Response.Write("<html>" + "\r");
    }
public class RtxLogin
{    //private static RTXSAPILib.RTXSAPIRootObj RootObj;       public static bool IsUserExisted(string username)
    {
        RTXSAPILib.RTXSAPIRootObj RootObj = new RTXSAPIRootObj();
        RTXSAPILib.RTXSAPIUserManager UserManagerObj = RootObj.UserManager;        bool bRet = true;
        try
        {
            bRet = UserManagerObj.IsUserExist(username);
        }
        catch (COMException ex)
        {
            bRet = false;
        }
        return bRet;
    }    public static string GetSessionKey(string Account)  //服务器端代码
    {
        string SessionKey = "";
        RTXSAPILib.RTXSAPIRootObj RootObj = new RTXSAPIRootObj();  //创建一个根对象
        RTXSAPILib.RTXSAPIUserAuthObj UserAuthObj = RootObj.UserAuthObj; //创建一个用户认证对象
        RootObj.ServerIP = ConfigurationManager.AppSettings["rtxServerIP"];  //设置服务器IP,"127.0.0.1" 
        RootObj.ServerPort = Convert.ToInt16(ConfigurationManager.AppSettings["rtxServerAppPort"]); //设置Appserver端口,8006         try 
        {
            SessionKey = UserAuthObj.GetSessionKey(Account);  //通过用户认证对象获取SessionKey,貌似正确的帐号才能正确获取SessionKey        }
        catch (COMException ex)
        {
            //Response.Write("<script language='javascript'>alert('ex.Message')</script>");            
        }
        return SessionKey; //返回SessionKey
    }    public static void SessionKeyLogin(string strServerIP, short sPort, string strAccount,string strSessionKey)
    {
        RTXClient.RTXAPIClass ObjApi = new RTXAPIClass();
        RTXCAPILib.IRTXCRoot RTXCRoot = (RTXCAPILib.IRTXCRoot)ObjApi.GetObject("KernalRoot");
        try
        {
            RTXCRoot.LoginSessionKey(strServerIP, sPort, strAccount, strSessionKey);
        }
        catch (COMException ex)
        {
            //Response.Write("<script language='javascript'>alert('" + ex.Message + "')</script>");     
        }
    }大家好,我做一个在OA上集成RTX实现单点登录功能?在做的过程中,怎么总是报输入的用户名不存在!但服务器上确实存在这个用户,希望有有高手能够解决!小弟感谢啦!

解决方案 »

  1.   

      try
            {
                bRet = UserManagerObj.IsUserExist(username);
            }
            catch (COMException ex)
            {
                bRet = false;
            }查看你这里 到底就是得到false还是有了异常 我是rtx2007没有这个方法 没法调试,另外按你的写法 你打算所有人都在服务器上登录一个RTX?登录应该是js调用rtx登录的 而不能在服务端里写
      

  2.   

    这是单点登录的原理!直接通过OA登录后,激活本地RTX!