这是我在项目中用到的一种Silverlight调用WCF服务的方法,现在记录下来,加深记忆。(以进行数的N次方计算为例)
- 添加项目“SimpleWCF.Contract”,这里写的是WCF服务的协定。
在这个项目里添加一个接口,该接口含有一个进行N次方计算的方法。

1 [ServiceContract] 2 public interface ISquareService 3 { 4 #region 获取某数的N次方值 5 /// <summary> 6 /// 说明:获取某数的N次方值 7 /// </summary> 8 /// <param name="dbValue">要进行求方计算的数</param> 9 /// <param name="intNum">几次方</param> 10 /// <returns>String类型的计算结果</returns> 11 [OperationContract] 12 String GetSquareValue(double dbValue, int intNum); 13 #endregion 14 }
2. 添加项目“SimpleWCF.Implement”,这里是WCF服务的实现。
在这个项目中添加一个类,继承"SimpleWCF.Contract"中的接口。

1 [ServiceBehavior] 2 class SquareService:SimpleWCF.Contract.ISquareService 3 { 4 #region 获取某数的N次方值 5 /// <summary> 6 /// 说明:获取某数的N次方值 7 /// </summary> 8 /// <param name="dbValue">要进行求方计算的数</param> 9 /// <param name="intNum">几次方</param> 10 /// <returns>String类型的计算结果</returns> 11 public String GetSquareValue(double dbValue, int intNum) 12 { 13 if (intNum < 0) 14 { 15 return "求方计算的次方不能小于0!"; 16 } 17 else if (intNum == 0) 18 { 19 return "1"; 20 } 21 else if (intNum == 1) 22 { 23 return dbValue.ToString(); 24 } 25 else 26 { 27 double dbResultValue = 1; 28 29 for (int i = 0; i < intNum; i++) 30 { 31 dbResultValue *= dbValue; 32 } 33 34 return dbResultValue.ToString(); 35 } 36 } 37 #endregion 38 }
3. 添加项目“SimpleWCF.Service”,这个项目用来统一管理WCF服务。
右键项目,添加名为“SquareService.svc”的WCF服务。删去自动生成的接口和代码实现类。
右击该服务,选择“查看标记”,修改Service项的值为“SimpleWCF.Implement.SquareService ”。
修改完成后,可右击该服务,选择“在浏览器中查看”,查看该服务。
4. 添加Silverlight项目“SimpleWCF.Client”,自动生成一个承载该项目的Web项目“SimpleWCF.Client.Web”。
在“SimpleWCF.Client”中,添加服务引用。
点击“发现”按钮可找到系统中可用的WCF服务。修改命名空间为“SquareService”,这些就可以在Silverlight程序中调用该服务了。

1 /// <summary> 2 /// 说明:单击“计算”按钮,得到计算结果 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btnCalculate_Click(object sender, RoutedEventArgs e) 7 { 8 SquareService.SquareServiceClient clientSquare = new SquareService.SquareServiceClient(); 9 clientSquare.GetSquareValueCompleted += new EventHandler<SquareService.GetSquareValueCompletedEventArgs>(clientSquare_GetSquareValueCompleted); 10 11 clientSquare.GetSquareValueAsync(double.Parse(this.txtNumber.Text), int.Parse(this.txtN.Text)); 12 } 13 14 /// <summary> 15 /// 说明:将计算结果显示在下方的文本框中 16 /// </summary> 17 /// <param name="sender"></param> 18 /// <param name="e"></param> 19 void clientSquare_GetSquareValueCompleted(object sender, SquareService.GetSquareValueCompletedEventArgs e) 20 { 21 this.txtResultValue.Text = "计算结果:" + e.Result; 22 }
结果如下图: