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

删除vs自動生成的iservice1.cs和service1.svc檔案,修改wcf服務固定端口12345。
在wcf服務應用程式wcfservicetest上,添加應用,選擇浏覽定位到 c:\program files\microsoft
sdks\silverlight\v4.0\libraries\server
\system.servicemodel.pollingduplex.dll,pollingduplex是一種擴充的雙工輪詢通訊方法,在安裝的
silverlight sdk中可以找到。
添加一個wcf服務,名稱servicetest。
修改wcf服務應用程式wcfservicetest的web.config檔案。
此處的修改,添加了兩個終結點,使用服務配置編輯器打開可以看到它們
服務配置編輯器,可以在開始菜單中找到
右鍵點選其屬性,複制其目标位址
右鍵wcf服務應用程式中的web.config檔案,選擇打開方式,點選添加,程式名輸入"服務配置編輯器的路徑",友好名稱"服務配置編輯器"
選擇web.config檔案的打開方式,就可以選擇服務配置編輯器打開了;
修改iservicetest.cs檔案。
callbackcontract=typeof(icallback),指定了回調接口;
(isoneway = true),單向調用,不需要傳回值。
修改servicetest.svc.cs檔案,實作iservice接口的sayhello方法,傳進name參數,處理為my name is
[name],作為參數再調用指定的回調接口icallback中的showhello方法,icallback中的所有方法則留給用戶端實作,這裡不需
要實作它。
當用戶端調用服務端的sayhellow方法時,服務端收到調用,擷取用戶端執行個體的通道。
按照約定好的回調接口,調用showhello方法,同時把參數傳遞過去,icallback中的方法留給用戶端實作,服務端這裡隻管調用。
你可能會遇到跨域問題,解決方法是為wcf應用程式wcfservicetest添加跨域檔案clientaccesspolicy.xml。
clientaccesspolicy.xml内容如下:
按 ctrl+c 複制代碼
重新生成解決方案,否則可能會遇到發現wcf服務有誤的情況,為silverlight項目添加服務引用,點選發現可以查找到剛剛添加的servicetest服務,修改命名空間servicereferencetest。
在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中。