WCF开发服务端应用程序
一、WCF基本介绍:
1.WCF是什么?
WCF(Windows Communication Foundation)它是数据通信的应用程序框架,是一款以Windows通信为基础的应用平台。
2.WCF有什么好处?
WCF优点概括:统一性、互操作性、安全可信赖、兼容性。
WCF可以解决服务与服务之间的通信问题。
WCF可以分布式提供计算可管理的方法,并为服务提供直接的支持。
WCF可以同过进程或不同系统、通过本地或通过Internet进行客户端和服务端之间的数据传输。
例如:做某个系统就可以充分体现其优势,我们将系统中的每个功能划分成一个模块,每个模块都做成一个客户端和一个服务端。这样在编写程序的时候,就不会因为几个人在做一个系统是产生冲突,通过分布式的管理方式,有效的将冲突原因避免了。
3.WCF能为开发人员带来怎样的便利
WCF为程序员提供了丰富的功能,托管、服务实例、异步、安全和事务管理。除此之外,WCF对标准的协议还进行了封装和定义,把程序员从繁琐的通信和格式分离出来,让程序员能专注业务逻辑。
二、开发WCF应用程序:
1.新建项目:
项目结构如下:
将Service1.svc设为起始页,按F5运行,出现出下界面:
这是系统自己建的WCF应用服务,我们添加自己的WCF服务,选中项目-->鼠标右键-->添加-->新建项:
项目结构如下:
然后可以看到IMyService.cs代码如下:
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();
}
}
对的,这是一个接口,接口中自动创建了个DoWork的方法,接口中的方法不能有实现,具体实现在MyService.svc.cs中:
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()
{
}
}
}
可以看到MyService继承了IMyService这个接口,并实现了其中的DoWork方法。我们在IMyService接口中添加一个自己的方法,并在继承它的类中去实现它:
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);
}
}
在继承它的类中去实现这个方法:
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;
}
}
}
然后将MyService.svc设为起始页,运行结果如下:
并没有看到我们自己写的SayHello的方法,细心的你肯定已经看到问题了,我们在接口中定义方法的时候并没有在方法的头部添加[OperationContract],添加后:
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);
}
}
再运行:
可以看到我们自己定义的SayHello方法,双击SayHello方法:
在请求窗口中的值中输入参数“科比”,然后点击“调用”,就可以看到返回的打招呼内容!!
注:
接口上方自动添加的[ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。
自定义方法上手动添加的[OperationContract],来说明该方法是一个WCF接口的方法,如果不加的话,将不能被外部调用。
这点和WebService中自定义方法上添加[WebMethod]很相似 。
2.WCF应用程序的发布过程:(和WebService的发布过程一致)
选中项目-->鼠标右键-->发布:
发布方法选择文件系统-->选择发布位置-->点击发布:
发布成功!!
3、在IIS上部署WCF:(与在IIS上部署WebService一致)
安装iis参考:https://jingyan.baidu.com/article/19192ad853224ce53f570748.html
打开IIS管理器:
选中网站-->鼠标右键-->添加网站:
物理路径选择发布WCF程序时的文件夹,端口不要和部署的其他程序冲突。
点击右侧浏览:
如下错误:
以上错误是由于发布WCF程序的时候我直接发布在新建在桌面的文件夹导致的,将该文件夹移动到如下目录:
一般部署在IIS上的程序都放在该目录。点击右侧基本设置:
重新选择物理路径,再浏览:
发布成功!!
4.在客户端调用WCF服务:(与WebService一致)
新建一个web空项目来测试客户端调用WCF服务:
选中项目-->鼠标右键-->添加服务引用:
以上地址填在IIS上浏览成功时的地址,如下:
点击前往可以看到我们自定义的WCF服务,点击接口就可以看到我们自定义的方法,如下:
命名空间可以修改,可以不改,你开心就好。
添加成功后的项目结构如下:
新建一个页面来测试下:
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);
}
}
}
其中MyServiceClent对象是在添加WCF服务的时候生成的服务端MyService类的客户端代理类,一般客户端代理类名称都会是:WCF服务名称+Client。
浏览结果如下:
客户端调用成功!!
以上就是本机调用,若要在同一局域网内的其他机器上调用,只需修改绑定地址,如下:
改成本机的ip地址,则可以在同一局域网内的其他机器调用;若要供不在同一网内的机器调用,则需要填写本机的外网IP地址,查看方法:http://ip.cn/
填写这个IP就可以供外网访问,当然本机需要开放对应的端口。
以上就是WCF服务应用程序的创建、发布、部署、调用的简单实例,若有错误,欢迎指教。
WCF的开发和WebService的开发很相似可以对比学习。C#创建webservice并发布,部署到iis,客户端调用