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標籤裏要按如下方式寫
<!--
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="../ClientBin/XingSoft.ShiMaoGroup.HabSilverlight.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.61118.0" />
<param name="autoUpgrade" value="true" />
<param name="onload" value="onSilverlightLoad"/>
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="獲取 Microsoft Silverlight" style="border-style:none"/>
</a>
</object></div>
-->
//看見紅色部分了嗎它指向的是下面這個js函數
var slProxy = null;
function onSilverlightLoad(sender) {
slProxy = sender.getHost();//獲取調用Silverlight代理類
}
//接下來調用就很簡單了
function invoke(sipUri) {
slProxy.Content.BeginConversation.BeginConversation(sipUri);//紅色爲你註冊時候的名字綠色爲你的Silverlight類裏寫的方法名
}
就這樣大功告成!!