一、概述
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。由 .NET Framework 3.0 开始引入。
WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。
WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。
WCF专门用于面向服务开发。
客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性。
二、新建WCF
说明:本文环境是建立在VS2017的基础上,不同版本VS操作上可能会有点不同
-
新建项目,直接选择创建WCF服务应用程序,
创建之后,生成这样的目录:
2.删除系统生成的两个文件IService1.cs与Service1.svc。
3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法PlusNumber,在User.svc.cs对该接口的方法进行实现。
代码如下:
//IUser.cs
namespace WcfService1
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IUser”。
[ServiceContract]
public interface IUser
{
//[OperationContract]
//void DoWork();
[OperationContract]
string PlusNumber(int a, int b);
}
}
//User.svc.cs
namespace WcfService1
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“User”。
// 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 User.svc 或 User.svc.cs,然后开始调试。
public class User : IUser
{
//public void DoWork()
//{
//}
public string PlusNumber(int a, int b)
{
int c = a + b;
string result = "WCF服务计算结果:"+c.ToString();
return result;
}
}
}
大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文,其他的和我们正常学习的接口一样。定义这个上下文要添加System.ServiceModel的引用。
[ServiceContract]
,来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。
[OperationContract]
,来说明该方法是一个WCF接口的方法,不加的话同上。
此时我们的第一个WCF服务程序就建立好了,将User.svc“设为起始页”,然后F5运行一下试试,如下图所示,VS自动调用了WCF的客户端测试工具以便我们测试程序,然后双击PlusNumber()
方法名,就会出现下图:
在请求窗口中的值中输入参数“a”与“b”,然后点击“调用”,在响应窗口中会出现返回值“WCF服务计算结果:a+b的值
”,说明测试成功,点击下面的XML也可以看到XML的数据传输。我们现在建立好了服务的应用程序和业务逻辑。
三、将WCF部署到IIS
到IIS右击网站,然后添加网站,将下图的参数填上。
然后再右击WcfService1文件将它设为应用程序:
然后就可以浏览此服务:
点击User.svc,跳转到以下调用页面:
点击
http://localhost:8001/WcfService1/User.svc?wsdl
,从这里可以看到我写的方法,这个地址也是我们后用将要引用的地址:
现在我们的WCF服务就算是已经部署完成了。
四、调用WCF
这边我是打算创建一个web服务程序来调用,所以我新建一个空白MVC web项目,
创建后目录:
然后添加服务引用,将添加好参数,可以修改引用命名空间名称,
完成添加后,这里我是选择创建一个Test控制器以及对应视图来达到调用那个WCF的服务,要记得using刚添加的WCF引用,这样才能使用。
控制器代码如下:
using WebForTest.ServiceReference1;
public class TestController : Controller
{
// GET: Test
public ActionResult Index()
{
ViewBag.result = "暂无计算";
return View();
}
// POST: Test
[HttpPost]
public ActionResult Index(int a,int b)
{
UserClient user = new UserClient();
string result = user.PlusNumber(a, b);
ViewBag.result = result;
return View();
}
}
视图代码如下:
@{
ViewBag.Title = "Index";
}
Index
@ViewBag.result
@using (Html.BeginForm("Index", "Test", FormMethod.Post))
{
+
}
运行效果如下:
通过以上例子我们就已经完成了对WCF的一个简单新建,部署及调用