cleo-凡事从积极的态度做起

学习,学习,学习 BI/biztalk/infopath/sharepoint,呵呵。 学习没有止境。。。

导航

LCS使用RTC API 发送IM消息的WebService

微软LCS 2005 With SP1 发布也有一段时间了。

1。准备工作:安装RTC Client API
        http://msdn.microsoft.com/downloads/list/clientapi.asp


Microsoft Windows Real-Time Communications Client API SDK v1.3
The Microsoft Windows Real-Time Communications Software Development Kit 1.3 provides information, samples, and tools regarding the additional features of the Real-Time Communications 1.3 API. Additional features include: enhanced multiple points of presence support, support for Microsoft Office Live Communications Server 2005, additional client security options, and marshalling support.

 

Microsoft Real-time Communications Client Software Development Kit (SDK) v1.2
The Microsoft Real-time Communications Client SDK provides documentation, sample code and other tools that allow developers to build real-time communication applications, or integrate real-time communication functionality into existing applications.
Note: To execute samples or applications upon any development or test machine, install the SDK and then run RTCAPISETUP.EXE to install the Microsoft Real-time Communications Client API binaries. This executable can be found within the "Installation" sub-directory.

 


重要:请安装同时1.2和1.3 ,安装完下载后的MSI包之后,而且要运行
    :\Program Files\RTC Client API v1.2 SDK\INSTALLATION\RtcApiSetup.exe
    :\Program Files\RTC Client API v1.3 SDK\INSTALLATION\RtcApiSetup.exe
    :\Program Files\RTC Client API v1.3 SDK\INSTALLATION\RtcSxSPolicies.msi
   以上3个全部要安装,不是说安装1.3就不需要安装1.2了,而且要按照这个顺序,否则可能不能成功。
最好重新启动电脑吧,(把WebService发布到服务器时候记得也要在服务器上面安装哦)

2:编写Lib

using System;
using System.Collections.Generic;
using System.Text;

namespace CMS.LCSLib
{
    
public class RTCClass
    
{            

        
private static void  createEnableProfile(RTCCORELib.RTCClient objRTCClient, string account, string password, string uri, string addr, string domain)
        
{
            
string s = "";
            s 
+= "<provision key=\"{566E246F-9978-4434-83BF-3E47BCCFF466}\" name=\"" + domain + "\">";
            s 
+= "<user account=\"" + account + "\" password=\"" + password + "\" uri=\"" + uri + "\" />";
            s 
+= "<sipsrv addr=\"" + addr + "\" protocol=\"tcp\" role=\"proxy\">";
            s 
+= "<session party=\"first\" type=\"pc2pc\" />";
            s 
+= "<session party=\"first\" type=\"pc2ph\" />";
            s 
+= "<session party=\"first\" type=\"im\" />";
            s 
+= "</sipsrv>";
            s 
+= "<sipsrv addr=\"" + addr + "\" protocol=\"tcp\" role=\"registrar\" />";
            s 
+= "</provision>";
            
            RTCCORELib.IRTCProfile2 objProfile;
//
            RTCCORELib.IRTCClientProvisioning2 objProvisioning;//

            
try
            
{
                objProvisioning 
= (RTCCORELib.IRTCClientProvisioning2)objRTCClient;

                objProfile 
= (RTCCORELib.IRTCProfile2)objProvisioning.CreateProfile(s);

                
//EnableProfile
                objProvisioning.EnableProfile(objProfile, 0xF);
                
//g_objProvisioning.EnableProfileEx(g_objProfile, 0x0000000F, 0x0000000F);
            }

            
catch (Exception ex)
            
{
                System.Diagnostics.EventLog.WriteEntry(
"LCSClass", ex.ToString());
            }

            
return ;

        }


        public static void SendMessage(string strDestURI)
        
{
            
string account = @"tianchi\test";
            
string password = "test";
            
string uri = "sip:test@tianchi.local";
            
string addr = "cms-biztalk.tianchi.local:5060";
            
string domain = "tianchi.local";
            
string strMsgHeader = null;
            
string strMsg = "test from webservice";
            
int lCookie = 0;
            
string strDestName = null;

            try
            
{

                  SendMessage(account, password, uri, addr, domain,
                       strMsgHeader, strMsg, lCookie, strDestURI, strDestName);
}
                  catch (Exception ex)
            
{
                System.Diagnostics.EventLog.WriteEntry(
"LCSClass", ex.ToString());
            }


            
return;
        }


        
public static void SendMessage(string account, string password, string uri, string addr, string domain,
            
string strMsgHeader, string strMsg, int lCookie, string strDestURI, string strDestName)
        
{
            
try
            
{
                RTCCORELib.RTCClient objRTCClient;
//            
                RTCCORELib.IRTCSession objSession;
                
//RTCCORELib.IRTCParticipant g_objParticipant;

                
//'RTCClient needs to be initialized before any other method can be called on it.
                objRTCClient = new RTCCORELib.RTCClient();
                objRTCClient.Initialize();

                
//createProfile & EnableProfile
                createEnableProfile(objRTCClient, account, password, uri, addr, domain);

                
//'Create an IM session.
                objSession = objRTCClient.CreateSession(RTCCORELib.RTC_SESSION_TYPE.RTCST_MULTIPARTY_IM, nullnull0);

                
//'Add a participant to the IM session.
                
//g_objParticipant = g_objSession.AddParticipant(strDestURI, strDestName);
                objSession.AddParticipant(strDestURI, strDestName);

                
//'Send a message.
                objSession.SendMessage(strMsgHeader, strMsg, lCookie);
                
//g_objSession.SendMessage(null, strMsg, 0);
            }

            
catch (Exception ex)
            
{
                System.Diagnostics.EventLog.WriteEntry(
"LCSClass", ex.ToString());
            }

        }

    }

}


3:编写WebService
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace 
= "http://tempuri.org/")]
[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
public class RTCClass : System.Web.Services.WebService
{
    
public RTCClass()
    
{

        
//Uncomment the following line if using designed components 
        
//InitializeComponent(); 
    }


    [WebMethod]
    
public void SendMessage(string account, string password, string uri, string addr, string domain,
            
string strMsgHeader, string strMsg, int lCookie, string strDestURI, string strDestName)
    
{
        CMS.LCSLib.RTCClass.SendMessage( account,  password,  uri,  addr,  domain,
             strMsgHeader,  strMsg,  lCookie,  strDestURI,  strDestName);
        
return ;
    }

    /// <summary>
    
/// 发送一个测试消息给某个用户
    
/// </summary>
    
/// <param name="strDestURI">格式:sip:cleo@tianchi.local</param>

    [WebMethod]
    
public void SendMessageTest(string strDestURI)
    
{      
        CMS.LCSLib.RTCClass.SendMessage( strDestURI);
        
return;
    }

    
}


关于RTCCORELib.dll 引用问题
++++++++++++++++++++++++++++++++++++++++
在项目里面引用DLL的时候,
路径可能是:C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Networking.RtcDll_6595b64144ccf1df_5.2.2.1_x-ww_d6bd8b93\RTCCORELib.dll
你在\WINDOWS\WinSxS\x86_Microsoft.Windows.Networking.RtcDll_XXXXX之类的目录里面找就可以,
你也可以搜索RTCCORELib.dll

注意在SDK安装的时候,要关闭其它程序,尤其是Messager之类的,否则可能会造成找不到RTCCORELib.dll

posted on 2005-12-29 10:23  无为而为-凡事从积极的态度做起  阅读(6785)  评论(55编辑  收藏  举报