一、WCF基本介绍:

1.WCF是什么?

WCF(Windows Communication Foundation)它是数据通信的应用程序框架,是一款以Windows通信为基础的应用平台。

2.WCF有什么好处?

WCF优点概括:统一性、互操作性、安全可信赖、兼容性。

WCF可以解决服务与服务之间的通信问题。

WCF可以分布式提供计算可管理的方法,并为服务提供直接的支持。

WCF可以同过进程或不同系统、通过本地或通过Internet进行客户端和服务端之间的数据传输。

例如:做某个系统就可以充分体现其优势,我们将系统中的每个功能划分成一个模块,每个模块都做成一个客户端和一个服务端。这样在编写程序的时候,就不会因为几个人在做一个系统是产生冲突,通过分布式的管理方式,有效的将冲突原因避免了。

3.WCF能为开发人员带来怎样的便利

WCF为程序员提供了丰富的功能,托管、服务实例、异步、安全和事务管理。除此之外,WCF对标准的协议还进行了封装和定义,把程序员从繁琐的通信和格式分离出来,让程序员能专注业务逻辑。

二、开发WCF应用程序:

1.新建项目:

WCF开发服务端应用程序_重命名

项目结构如下:

WCF开发服务端应用程序_客户端_02

将Service1.svc设为起始页,按F5运行,出现出下界面:

WCF开发服务端应用程序_客户端_03

这是系统自己建的WCF应用服务,我们添加自己的WCF服务,选中项目-->鼠标右键-->添加-->新建项:

WCF开发服务端应用程序_应用程序_04

项目结构如下:

WCF开发服务端应用程序_配置文件_05

然后可以看到IMyService.cs代码如下:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;  namespace WCFDemo {     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。     [ServiceContract]     public interface IMyService     {         [OperationContract]         void DoWork();     } }

WCF开发服务端应用程序_右键_06

对的,这是一个接口,接口中自动创建了个DoWork的方法,接口中的方法不能有实现,具体实现在MyService.svc.cs中:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;  namespace WCFDemo {     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyService”。     public class MyService : IMyService     {         public void DoWork()         {         }     } }

WCF开发服务端应用程序_右键_06

可以看到MyService继承了IMyService这个接口,并实现了其中的DoWork方法。我们在IMyService接口中添加一个自己的方法,并在继承它的类中去实现它:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;  namespace WCFDemo {     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。     [ServiceContract]     public interface IMyService     {         [OperationContract]         void DoWork();         string SayHello(string name);     } }

WCF开发服务端应用程序_右键_06

在继承它的类中去实现这个方法:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;  namespace WCFDemo {     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyService”。     public class MyService : IMyService     {         public void DoWork()         {         }          public string SayHello(string name) {             return "Hello!!" + name;         }     } }

WCF开发服务端应用程序_右键_06

然后将MyService.svc设为起始页,运行结果如下:

WCF开发服务端应用程序_应用程序_14

并没有看到我们自己写的SayHello的方法,细心的你肯定已经看到问题了,我们在接口中定义方法的时候并没有在方法的头部添加[OperationContract],添加后:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;  namespace WCFDemo {     // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。     [ServiceContract]     public interface IMyService     {         [OperationContract]         void DoWork();          /// <summary>         /// 自定义的打招呼的方法         /// </summary>         /// <param name="name">名字</param>         /// <returns>打招呼内容</returns>         [OperationContract]         string SayHello(string name);     } }

WCF开发服务端应用程序_右键_06

再运行:

WCF开发服务端应用程序_右键_17

可以看到我们自己定义的SayHello方法,双击SayHello方法:

WCF开发服务端应用程序_应用程序_18

在请求窗口中的值中输入参数“科比”,然后点击“调用”,就可以看到返回的打招呼内容!!

注:

接口上方自动添加的[ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。

自定义方法上手动添加的[OperationContract],来说明该方法是一个WCF接口的方法,如果不加的话,将不能被外部调用。

这点和WebService中自定义方法上添加[WebMethod]很相似 。

2.WCF应用程序的发布过程:(和WebService的发布过程一致)

WCF开发服务端应用程序_应用程序_19

选中项目-->鼠标右键-->发布:

WCF开发服务端应用程序_配置文件_20

发布方法选择文件系统-->选择发布位置-->点击发布:

WCF开发服务端应用程序_客户端_21

发布成功!!

3、在IIS上部署WCF:(与在IIS上部署WebService一致)

  安装iis参考:​​https://jingyan.baidu.com/article/19192ad853224ce53f570748.html​

打开IIS管理器:

WCF开发服务端应用程序_右键_22

选中网站-->鼠标右键-->添加网站:

WCF开发服务端应用程序_重命名_23

物理路径选择发布WCF程序时的文件夹,端口不要和部署的其他程序冲突。

点击右侧浏览:

WCF开发服务端应用程序_客户端_24

如下错误:

WCF开发服务端应用程序_重命名_25

以上错误是由于发布WCF程序的时候我直接发布在新建在桌面的文件夹导致的,将该文件夹移动到如下目录:

WCF开发服务端应用程序_右键_26

一般部署在IIS上的程序都放在该目录。点击右侧基本设置:

WCF开发服务端应用程序_配置文件_27

重新选择物理路径,再浏览:

WCF开发服务端应用程序_应用程序_28

发布成功!!

4.在客户端调用WCF服务:(与WebService一致)

新建一个web空项目来测试客户端调用WCF服务:

WCF开发服务端应用程序_应用程序_29

选中项目-->鼠标右键-->添加服务引用:

WCF开发服务端应用程序_客户端_30

以上地址填在IIS上浏览成功时的地址,如下:

WCF开发服务端应用程序_客户端_31

点击前往可以看到我们自定义的WCF服务,点击接口就可以看到我们自定义的方法,如下:

WCF开发服务端应用程序_配置文件_32

命名空间可以修改,可以不改,你开心就好。

添加成功后的项目结构如下:

WCF开发服务端应用程序_重命名_33

新建一个页面来测试下:

WCF开发服务端应用程序_右键_06

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; //引用WCF服务的命名空间 using WCFClient.WCFService; namespace WCFClient {     public partial class Index : System.Web.UI.Page     {         protected void Page_Load(object sender, EventArgs e)         {             MyServiceClient client = new MyServiceClient();             string msg = client.SayHello("科比");             Response.Write(msg);         }     } }

WCF开发服务端应用程序_右键_06

其中MyServiceClent对象是在添加WCF服务的时候生成的服务端MyService类的客户端代理类,一般客户端代理类名称都会是:WCF服务名称+Client。

浏览结果如下:

WCF开发服务端应用程序_应用程序_36

客户端调用成功!!

以上就是本机调用,若要在同一局域网内的其他机器上调用,只需修改绑定地址,如下:

WCF开发服务端应用程序_右键_37

改成本机的ip地址,则可以在同一局域网内的其他机器调用;若要供不在同一网内的机器调用,则需要填写本机的外网IP地址,查看方法:​http://ip.cn/

WCF开发服务端应用程序_客户端_38

填写这个IP就可以供外网访问,当然本机需要开放对应的端口。

以上就是WCF服务应用程序的创建、发布、部署、调用的简单实例,若有错误,欢迎指教。