RTXSApi 使用

问题:

s出现错误
检索 COM 类工厂中 CLSID 为 {79210E58-99EB-45D0-8890-763EFEAA143F} 的组件时失败,原因是出现以下错误: 80040154。

原因是:

可能遇到的问题:

1.调用com+的时候,对COM 组件的调用返回了错误 HRESULT E_FAIL

原因:调用rtx组件实现登陆的时候,需要对NTFS文件夹进行权限配置

解决办法:

1. 在控制面板--->管理工具--->服务 中,开启Distributed Transaction Coordinator 服务。
2. 打开控制面板--->管理工具--->组件服务--->选择计算机--->我的电脑--->右击属性--->选择MSDTC--->选择安全配置勾选事务管理器通信中的允许出站、允许入站和不要求进行验证。
如下图所示:

 

重启IIS

实例文档:

RTX服务端提供了2个接口,RTXServerApiRTXSAPILib。RTXServerApi主要用于和以前的老RTX版本结合,兼容RTX旧版本接口,现在不开发了,不建议使用。RTXSAPILib实现了RTXServerApi的所有接口,并附带开发了一些新功能,所以基于RTX的开发,建议使用。

1. 在服务端发送消息

这个实例我们采用RTXSAPILib,如果是asp.net的开发,需要导入Interop.RTXCAPILib.dll,Interop.RTXClient.dll,Interop.RTXSAPILib.dll这3个dll,在安装目录下可以找到。使用这个对象之前需要设定它的ip和端口,设置好后,可以利用消息提醒方法给任何一个指定的人发短信。具体代码如下:

RTXSAPILib.RTXSAPIRootObj RootObj;//声明一个根对象

public RtxUtil()

{

string RTXConnString = ConfigurationSettings.AppSettings["RTXconnString"].ToString();

string[] RTXarg = RTXConnString.Split(';');

RootObj = new RTXSAPIRootObj();//创建根对象

RootObj.ServerIP = ((string[])(RTXarg[0].Split('=')))[1]; //设置服务器IP

RootObj.ServerPort = short.Parse(((string[])(RTXarg[1].Split('=')))[1]); //设置服务器端口

}

 

public void sendMSG(string txtReceivers, string txtMsgTitle, int txtTime, string txtMsgContent)

{

try

{

RootObj.SendNotify(txtReceivers, txtMsgTitle, txtTime, txtMsgContent); //发送信息

}

catch (Exception xe)

{

}

}

2.组织机构同步

这个功能我们采用RTXServerApi这个对象,需要使用的分对象有RTXObjectClass,RTXCollectionClass,需要使用的方法有Call2,同样在使用时需要制定根目录对象的IP和端口。其实组织机构同步原理是用集合对象去读取XML里面的数据,所以你得把组织机构先生成一个xml,然后以DATA的方式放到集合对象中,最后调用CALL2把数据读进去放到rtx中,这样就可以了。

具体代码如下:

RTXServerApi.RTXObjectClass RTXObj = new RTXObjectClass();//创建一个业务逻辑对象

RTXServerApi.RTXCollectionClass RTXParams = new RTXCollectionClass();// 创建一个集合对象

 

RTXObj.Name = "USERSYNC";//业务逻辑对象名称为用户同步类别

RTXParams.Add("MODIFYMODE", 1);

RTXParams.Add("DATA", textBox1.Text);

这里textBox1.Text里的内容实际上时一个xml的所有数据。

try

{

RTXObj.Call2(enumCommand_.PRO_SYNC_TO_RTX , RTXParams);

MessageBox.Show("导入成功");

}

如果远程访问其他服务器的Rtx组件包,需要以下步骤:

 

1.在本服务器上安装Rtx的Sdk和服务管理器(需要里面的组件,因为找不到具体是什么组件),然后再卸载他们。

2. 在rtx服务器进行设置,如:你的服务器的IP是192.168.1.156,那么需要把这个IP设置到Rtx服务器里,让它允许你访问它的组件。From WWW.JOOZONE.COM

具体做法是:

(1)打开Rtx的安装目录下的AppConnConfig.xml,这个配置文件用于应用程序连接,(2)在文件的<IPLimit Enabled="1">下加<IP>192.168.1.156</IP>。

(3)从启Rtx服务

3.如果Rtx服务器开了防火墙,需要在网上邻居打开8006端口

4.测试,用telnet <rtx服务器IP> 8006命令,如果出现黑屏小花,说明配置成功。

 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

版本:2008 Beta1 (8.0.054.201)

引用:Interop.RTXCAPILib.dll

     Interop.RTXClient.dll

     Interop.RTXSAPILib.dll

 

 

using RTXCAPILib;

using RTXSAPILib;

using RTXClient;

 

本文完全按照腾讯公司提供的Demo操作

 

------------------------------------------------------------------

VS 2005

 

1.新建网站 RTX_test

 

功能一:单点登录

 

前台:

<table style="position: relative">

           <tr>

               <td style="width: 100px">

                   服务器地址:</td>

               <td style="width: 100px">

                   <asp:TextBox ID="txtServerIP" runat="server" Style="position: relative">127.0.0.1</asp:TextBox></td>

               <td style="width: 122px">

                   AppServer端口:</td>

               <td style="width: 100px">

                   <asp:TextBox ID="txtAppServerPort" runat="server" Style="position: relative">8006</asp:TextBox></td>

           </tr>

           <tr>

               <td style="width: 100px">

                   用户名:</td>

               <td style="width: 100px">

                   <asp:TextBox ID="txtUserName" runat="server" Style="position: relative">wf</asp:TextBox></td>

               <td style="width: 122px">

                   登录端口:</td>

               <td style="width: 100px">

                   <asp:TextBox ID="txtServerPort" runat="server" Style="position: relative">8000</asp:TextBox></td>

           </tr>

           <tr>               

               <td align=center colspan="4" style="height: 26px">

                   <asp:Button ID="Button1" runat="server" Style="position: relative" Text="登录" OnClick="Button1_Click" /></td>

           </tr>

       </table>

 

 

后台:

using RTXCAPILib;

using RTXSAPILib;

using RTXClient;

 

 

   protected void Button1_Click(object sender, EventArgs e)

   {

       //登录

       RTXClient.RTXAPIClass ObjApi = new RTXAPIClass(); //创建一个客户端SDK主对象     

       RTXCAPILib.IRTXCRoot RTXCRoot = (RTXCAPILib.IRTXCRoot)ObjApi.GetObject("KernalRoot"); //通过主对象获取CRoot对象

 

 

       try

       {

           string Account = txtUserName.Text; //帐号

           string SessionKey = GetSessionKey(Account);//获取SessionKey

 

           RTXCRoot.LoginSessionKey(txtServerIP.Text, Convert.ToInt16(txtServerPort.Text), Account, SessionKey); //SessionKey 登录

           

           Response.Redirect("browinfo.aspx");

       }

       catch (Exception ex)

       {

           Response.Write(ex.Message.ToString());

       }

   }

 

   private string GetSessionKey(string Account) //服务器端代码

   {

       string SessionKey = "";

 

       RTXSAPILib.RTXSAPIRootObj RootObj = new RTXSAPIRootObj(); //创建一个根对象

       RTXSAPILib.RTXSAPIUserAuthObj UserAuthObj = RootObj.UserAuthObj; //创建一个用户认证对象

 

       RootObj.ServerIP = txtServerIP.Text; //设置服务器IP

       RootObj.ServerPort = Convert.ToInt16(txtAppServerPort.Text); //设置Appserver端口

       

       try

       {

           SessionKey = UserAuthObj.GetSessionKey(Account); //通过用户认证对象获取SessionKey

       }

       catch (Exception ex)

       {

           Response.Write(ex.Message.ToString());

       }

 

       return SessionKey; //返回SessionKey

   }

  需要注意:

rtx服务端默认只允许本机通过sdk来访问,如果从其他机器利用sdk来连接服务端就会被拒绝。

解决方法如下:

在RTX服务端的安装目录下找到下面两个文件 AppConnConfig.xml,SDKProperty.xml ,里面的格式大致如下

view plaincopy to clipboardprint?
01.<?xml version="1.0"?> 
02.<Property> 
03.<APIClient> 
04.    <IPLimit Enabled="1"> 
05.        <IP>127.0.0.1</IP> 
06.    </IPLimit> 
07.</APIClient> 
08. 
09.</Property> 
<?xml version="1.0"?>
<Property>
<APIClient>
 <IPLimit Enabled="1">
  <IP>127.0.0.1</IP>
 </IPLimit>
</APIClient>

</Property>

posted @ 2012-01-04 16:22  365lei  阅读(1843)  评论(0编辑  收藏  举报