jsvascript調用Silverlight方法實現Lync聊天

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標籤裏要按如下方式寫

<!-- 

<div id="silverlightControlHost"   >
        <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類裏寫的方法名
    }

 

就這樣大功告成!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章