Microsoft Lync 是一客户端程序,要想通过web方式调用其API 很难,当做过了,其实它一点也不难,要么写Com组件要么利用Silverlight来实现,对于.NET程序猿来说写Com组件也许并不是那么习惯,那么我们何不用Silverlight来实现呢,如今Silverlight已经5.0了它已经很成熟很强大了,但它的一弱点,不能引用非Silverlight的组件,意思就是说,你要用到你自己的类库的时候,那么它会不让你引用,但问题都会有解决办法的,你可以用Silverlight调用WCF或者webservice都可以实现通信,今天主要不是讲Silverlight与WCF等各种服务通信,回到正题,其实微软的Lync API提供了一个Com组件比如Name.NameCtrl.1 但这个东西只能获取到lync用户的状态(在线、离线、忙碌....) 所以要通过它来发起与Lync其它用户的聊天对话,是不行的,所以我这里选择用Silverlight来实现,那么javascript 又如何去调得到Silverlight的方法呢,很简单通过代码,一看就能明白,首先Silverlight应用程序必须提供一个方法标识为可调用,要为Silverlight方法头上加上这个特性,[ScriptableMember],这样就声明了我这个方法是供脚本对象来调用的,
[ScriptableMember]
public void BeginConversation(string sipUri)
{
LyncClient client = LyncClient.GetClient();
Contact contact = client.ContactManager.GetContactByUri(sipUri);
ContactAvailability availability = (ContactAvailability)contact.GetContactInformation(ContactInformationType.Availability);
Conversation conversation = client.ConversationManager.AddConversation();
conversation.AddParticipant(contact);
InstantMessageModality m = (InstantMessageModality)conversation.Modalities[ModalityTypes.InstantMessage];
m.BeginConnect(null, null);
}
好了Silverlight的方法已经写好,接下来,你得注册,不然js还是调不到,
打开Silverlight的App.App.xaml.cs文件,这货就相当于CS程序的Program类,web程序的Global.asax,就是表示Silverlight的入口,打开这个类在它的如下方法中进行注册
private void Application_Startup(object sender, StartupEventArgs e)
{
SendLync send = new SendLync();//表示你的BeginConversation方法所在的xaml后台类
sender.RootVisual = send;
HtmlPage.RegisterScriptableObject("BeginConversation", send);//注册之前我们写好的方法
}
到些为止Silverlight端已完成了;
JS调用:
在你的承载Silverlight的页面的object标签里要按如下方式写
<!--
//看见红色部分了吗它指向的是下面这个js函数
var slProxy = null;
function onSilverlightLoad(sender) {
slProxy = sender.getHost();//获取调用Silverlight代理类
}
//接下来调用就很简单了
function invoke(sipUri) {
slProxy.Content.BeginConversation.BeginConversation(sipUri);//红色为你注册时候的名字绿色为你的Silverlight类里写的方法名
}
就这样大功告成!!