一个简单的WCF实例

1 新建空解决方案WCFExample

在解决方案WCFExample下新建以下项目:

  • Service(输出类型为“类库”):WCF服务程序。
  • Business(输出类型为“类库”):供WCF服务调用的具体业务实现。
  • Host(输出类型为“控制台应用程序”):WCF服务宿主程序。
  • Client(输出类型为“Windows应用程序 ”):调用WCF服务的客户端程序。

项目结构如下图所示。

2 实现Business项目

项目下新建BubbleSortBusiness类(类文件BubbleSortBusiness.cs),类中添加BubbleSort方法实现冒泡排序功能,客户端程序通过WCF服务调用该方法来完成冒泡排序操作。

详细代码如下所示。

扫描二维码关注公众号,回复: 2692875 查看本文章
 
  1. using System;

  2. namespace Business

  3. {

  4. public class BubbleSortBusiness

  5. {

  6. public int[] BubbleSort(int[] listNumber)

  7. {

  8. try

  9. {

  10. if (listNumber != null && listNumber.Length != 0)

  11. {

  12. bool flag;

  13. int temp;

  14. for (int i = 0; i < listNumber.Length - 1; i++)

  15. {

  16. flag = false;

  17. for (int j = 0; j < listNumber.Length - i - 1; j++)

  18. {

  19. if (listNumber[j] > listNumber[j + 1])

  20. {

  21. temp = listNumber[j];

  22. listNumber[j] = listNumber[j + 1];

  23. listNumber[j + 1] = temp;

  24. flag = true;

  25. }

  26. }

  27. if (!flag)

  28. {

  29. break;

  30. }

  31. }

  32. return listNumber;

  33. }

  34. else

  35. {

  36. return null;

  37. }

  38. }

  39. catch(Exception ex)

  40. {

  41. //将异常写入log(代码省略)

  42. return null;

  43. }

  44. }

  45. }

  46. }

3 实现Service项目

首先,需要添加对Business项目的引用,因为Service项目需要调用Business下的BubbleSort方法来完成冒泡排序操作。

我们这里直接添加项目Business编译后的dll即可,另外还需要添加对System.ServiceModel的引用。

添加引用后引用文件夹包含下图所示内容。

接着,在项目下新建IBubbleSortService接口(类文件IBubbleSortService.cs),详细代码如下所示。

 
  1. using System.ServiceModel;

  2. namespace Service

  3. {

  4. [ServiceContract]

  5. public interface IBubbleSortService

  6. {

  7. [OperationContract]

  8. int[] BubbleSort(int[] listNumber);

  9. }

  10. }

紧接着,添加IBubbleSortService接口的实现类BubbleSortService (类文件BubbleSortService.cs),详细代码如下所示。

 
  1. using Business;

  2. namespace Service

  3. {

  4. public class BubbleSortService : IBubbleSortService

  5. {

  6. public int[] BubbleSort(int[] listNumber)

  7. {

  8. return new BubbleSortBusiness().BubbleSort(listNumber);

  9. }

  10. }

  11. }

4 实现Host项目

WCF不能独立运行,需要一个载体来承载才能运行,此载体被称作宿主

宿主程序可以是Windows应用程序,控制台应用程序,ASP.NET应用程序等。

本文新建一个控制台应用程序Host作为WCF服务的宿主程序。

一开始,需要添加对Service项目的引用,添加方法同样是添加Service项目编译后的dll即可。另外,同样需要添加对System.ServiceModel的引用。

添加引用后引用文件夹包含下图所示内容。

接着,修改项目下类文件Program,cs的代码如下所示。

 
  1. using System;

  2. using System.ServiceModel;

  3. using Service;

  4. namespace Host

  5. {

  6. class Program

  7. {

  8. static void Main(string[] args)

  9. {

  10. Type ServiceType = typeof(BubbleSortService);

  11. using (ServiceHost host = new ServiceHost(ServiceType))

  12. {

  13. host.Open();

  14. Console.WriteLine("服务已经启动!");

  15. Console.ReadKey(true);

  16. host.Close();

  17. }

  18. }

  19. }

  20. }

随后,添加配置文件App.config,配置文件的详细内容如下所示。

 
  1. <?xml version="1.0" encoding="utf-8" ?>

  2. <configuration>

  3. <system.serviceModel>

  4. <services>

  5. <service name="Service.BubbleSortService" behaviorConfiguration="BubbleSortService">

  6. <host>

  7. <baseAddresses>

  8. <add baseAddress="http://localhost:8888/Service/"/>

  9. </baseAddresses>

  10. </host>

  11. <endpoint address="BubbleSortService" binding="basicHttpBinding" contract="Service.IBubbleSortService">

  12. </endpoint>

  13. </service>

  14. </services>

  15. <behaviors>

  16. <serviceBehaviors>

  17. <behavior name="BubbleSortService">

  18. <serviceMetadata httpGetEnabled="true" />

  19. <serviceDebug includeExceptionDetailInFaults="false"/>

  20. </behavior>

  21. </serviceBehaviors>

  22. </behaviors>

  23. </system.serviceModel>

  24. </configuration>

编译项目Host后,运行Host.exe,效果如下图所示。

在浏览器地址栏输入服务访问地址http://localhost:8888/Service/,测试服务是否能够访问。如果显示下图结果则说明服务可以被访问。

 

5 实现Client项目

首先,需要添加对服务的引用。

添加方法:在“引用”文件夹上右键点击菜单项“添加服务引用”打开“添加服务引用”窗口。

在“添加服务引用”窗口的地址栏输入服务地址后,点击“前往”按钮,选中需要添加的服务,点击“确定”按钮即可完成服务引用的添加。

(注意:添加服务引用时,Host.exe程序需要运行起来,这样才可以找到需要被添加的服务。)

添加服务引用成功后,在Client项目下会出现Service References目录,同时生成了配置文件app.config(如下图所示)。

 

配置文件app.config的详细内容如下所示。

 
  1. <?xml version="1.0" encoding="utf-8" ?>

  2. <configuration>

  3. <system.serviceModel>

  4. <bindings>

  5. <basicHttpBinding>

  6. <binding name="BasicHttpBinding_IBubbleSortService" />

  7. </basicHttpBinding>

  8. </bindings>

  9. <client>

  10. <endpoint address="http://localhost:8888/Service/BubbleSortService"

  11. binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IBubbleSortService"

  12. contract="ServiceReference1.IBubbleSortService" name="BasicHttpBinding_IBubbleSortService" />

  13. </client>

  14. </system.serviceModel>

  15. </configuration>

注意:这个app.config文件是自动生成的,不需要手动添加,但是也不能被删除。

随后,制作窗体程序的界面,如下图所示。

同时,编写窗体的后端代码,如下所示。

 
  1. using System;

  2. using System.Windows.Forms;

  3.  
  4. namespace Client

  5. {

  6. public partial class frmSorter : Form

  7. {

  8. ServiceReference1.BubbleSortServiceClient bubbleSortClient

  9. = new ServiceReference1.BubbleSortServiceClient();

  10.  
  11. public frmSorter()

  12. {

  13. InitializeComponent();

  14. }

  15.  
  16. private void btnSort_Click(object sender, EventArgs e)

  17. {

  18. if (!string.IsNullOrEmpty(txtSrcData.Text.Trim()))

  19. {

  20. //省略数据校验代码

  21. //必须是由逗号分隔的整型数据

  22. string srcData = txtSrcData.Text.Trim();

  23. string[] arrSrcData = srcData.Split(',');

  24. int len = arrSrcData.Length;

  25. int[] intSrcData = new int[len];

  26. for (int i = 0; i < len; i++)

  27. {

  28. intSrcData[i] = Convert.ToInt32(arrSrcData[i]);

  29. }

  30. intSrcData = bubbleSortClient.BubbleSort(intSrcData);

  31. string strResult=string.Empty;

  32. for (int i = 0; i < len; i++)

  33. {

  34. strResult += Convert.ToString(intSrcData[i])+" ";

  35. }

  36. txtSortedData.Text = strResult;

  37.  
  38. }

  39. else

  40. {

  41. MessageBox.Show("请输入待排序的整型数据!");

  42. }

  43. }

  44. }

  45. }

6 运行程序

运行Client.exe与Host.exe程序,得到以下结果。

至此,一个简单的WCF程序完成了。

猜你喜欢

转载自blog.csdn.net/Simon1003/article/details/81303557