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类里写的方法名
    }

 

就这样大功告成!!

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