天天看點

silverlight與wcf雙向通訊 例子

  建立silverlight應用程式,名稱wcftest。解決方案中添加wcf服務應用程式,名稱wcfservicetest,wcf服務将不再寄宿在web中。

silverlight與wcf雙向通訊 例子

  删除vs自動生成的iservice1.cs和service1.svc檔案,修改wcf服務固定端口12345。

silverlight與wcf雙向通訊 例子
silverlight與wcf雙向通訊 例子

  在wcf服務應用程式wcfservicetest上,添加應用,選擇浏覽定位到 c:\program files\microsoft

sdks\silverlight\v4.0\libraries\server

\system.servicemodel.pollingduplex.dll,pollingduplex是一種擴充的雙工輪詢通訊方法,在安裝的

silverlight sdk中可以找到。

silverlight與wcf雙向通訊 例子

    添加一個wcf服務,名稱servicetest。

silverlight與wcf雙向通訊 例子

修改wcf服務應用程式wcfservicetest的web.config檔案。

此處的修改,添加了兩個終結點,使用服務配置編輯器打開可以看到它們

silverlight與wcf雙向通訊 例子
silverlight與wcf雙向通訊 例子

服務配置編輯器,可以在開始菜單中找到

silverlight與wcf雙向通訊 例子

右鍵點選其屬性,複制其目标位址

silverlight與wcf雙向通訊 例子

右鍵wcf服務應用程式中的web.config檔案,選擇打開方式,點選添加,程式名輸入"服務配置編輯器的路徑",友好名稱"服務配置編輯器"

silverlight與wcf雙向通訊 例子

選擇web.config檔案的打開方式,就可以選擇服務配置編輯器打開了;

   修改iservicetest.cs檔案。

callbackcontract=typeof(icallback),指定了回調接口;

(isoneway = true),單向調用,不需要傳回值。

  修改servicetest.svc.cs檔案,實作iservice接口的sayhello方法,傳進name參數,處理為my name is

[name],作為參數再調用指定的回調接口icallback中的showhello方法,icallback中的所有方法則留給用戶端實作,這裡不需

要實作它。

當用戶端調用服務端的sayhellow方法時,服務端收到調用,擷取用戶端執行個體的通道。

silverlight與wcf雙向通訊 例子

按照約定好的回調接口,調用showhello方法,同時把參數傳遞過去,icallback中的方法留給用戶端實作,服務端這裡隻管調用。

   你可能會遇到跨域問題,解決方法是為wcf應用程式wcfservicetest添加跨域檔案clientaccesspolicy.xml。

silverlight與wcf雙向通訊 例子

clientaccesspolicy.xml内容如下:

按 ctrl+c 複制代碼

  重新生成解決方案,否則可能會遇到發現wcf服務有誤的情況,為silverlight項目添加服務引用,點選發現可以查找到剛剛添加的servicetest服務,修改命名空間servicereferencetest。

silverlight與wcf雙向通訊 例子
silverlight與wcf雙向通訊 例子

  在silverlight項目的mainpage.xaml上,為了便于示範,添加一個textbox,一個button,一個textblock。

  添加button1的點選click事件。

new

pollingduplexhttpbinding();執行個體化一個pollingduplex通道,pollingduplex為雙向工作輪詢通信機制;

inactivitytimeout = timespan.fromminutes(20);每次輪詢建立的有效時間為20分鐘;

new endpointaddress("");指定svc服務的終結點位址;

client.sayhellowasync(this.textbox1.text);将textbox1的text内容作為參數,異步調用服務端的sayhellow方法;

 client.showhelloreceived += new

eventhandler<servicereferencetest.showhelloreceivedeventargs>

(client_showhelloreceived);調用服務端的sayhellow方法,方法将調用回調接口icallback中的

showhello方法,這裡指定showhello調用完成的事件;

這裡就是對icallback接口中showhello方法的實作,可使用參數e.hello,當用戶端調用服務端的sayhello方法

時,sayhello方法中調用指定的回調接口icallback中的showhello方法,用戶端完善調用到showhello方法完成後的事件,顯

示結果hello![e.hello],在textblock1上;

  f5運作,在textbox1中輸入名字name,點選button1,調用服務端的sayhello方法帶參數name,sayhello方

法處理為mynameis[name],作為參數再調用指定的回調接口icallback中的showhello方法,用戶端實作調用showhello

方法完成後的事件, 處理為hello![e.hello],後輸出結果到textblock1中。

silverlight與wcf雙向通訊 例子