WCF学习笔记之WCF初识
这篇博客将介绍WCF的最基础内容,让我们对WCF有一个基本的认识。后续的博客中将会介绍WCF其他方面内容。本篇博客将通过一个简单的例子,介绍如何创建WCF服务,并承载这个服务,让客户端来访问它。下面请看项目结构。

Client与Hosting是控制台程序,Hosting工程需要添加Contract,Service工程和System.ServiceModel名称空间。Contract工程是类库工程,需要添加System.ServiceModel名称空间,Service工程也是类库工程,需要添加Contract工程引用和System.ServiceModel名称空间。
在Contract类库中添加ICalculateService接口,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel; namespace Contract
{
[ServiceContract]
public interface ICalculateService
{
[OperationContract]
double Add(double x, double y); [OperationContract]
double Subtract(double x, double y); [OperationContract]
double Divide(double x, double y); [OperationContract]
double Multiply(double x, double y);
}
}
在Service类库中新建CalculateService类,实现ICalculateService方法。
using Contract;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Service
{
public class CalculateService : ICalculateService
{
public double Add(double x, double y)
{
return x + y;
} public double Divide(double x, double y)
{
return x / y;
} public double Multiply(double x, double y)
{
return x * y;
} public double Subtract(double x, double y)
{
return x - y;
}
}
}
此时WCF服务的契约和实现已经完成了,下面对这个服务进行承载,对WCF的承载有很多种方式,这篇博客介绍通过Console程序和IIS来承载WCF服务。
1. 通过Hosting控制台程序来承载。需要在配置文件(app.config/web.config)中添加服务的终结点,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<services>
<service name="Service.CalculateService"
behaviorConfiguration="CalculateServiceBehavior">
<endpoint
address=""
binding="basicHttpBinding"
contract="Contract.ICalculateService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint> <endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://192.168.1.104/CalculateService"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CalculateServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
承载服务
using (ServiceHost host = new ServiceHost(typeof(CalculateService)))
{
host.Opened += delegate
{
Console.WriteLine("Service is opened.");
}; host.Open(); Console.ReadKey();
}
运行Hosting程序,在浏览器中访问配置文件中服务的地址,
这就说明我们的服务已经部署成功,下面可以来引用服务,并调用服务公开的方法。
在Client工程右击选择Add Service References

输入服务地址,点击Go,可以找到我们已经部署的服务。
我个人比较喜欢通过SvcUtil命令生成Service的客户端代理类,打开Developer Command prompt for VS2015工具,输入SvcUtil /out:D:\CalculateServiceProxy.cs /config:D:\app.config http://192.168.1.104/CalculateService
直接通过命令行方式生成代理类很简洁,也便于在团队开发中控制(个人观点)。

将生成的CalculateServiceProxy类拷贝到Client工程下Services目录中,替换Client工程中App.config文件内容。下面对服务进行调用,
using (CalculateServiceClient proxy = new CalculateServiceClient())
{
Console.WriteLine(proxy.Add(,));
Console.WriteLine(proxy.Divide(, ));
Console.WriteLine(proxy.Multiply(, ));
Console.WriteLine(proxy.Subtract(, )); Console.ReadKey();
}
运行效果如下:
2. 通过IIS来承载WCF服务,我们只需要做一点点的改变即可,再新建一个类库工程叫IISHosting,引用Contract,Service两个类库,添加一个配置文件叫Web.config, 将上面配置文件的内容复制到Web.config中,删除host节点的内容,再新建一个叫做CalculateService.svc文件,添加如下代码:
<%@ ServiceHost Service="Service.CalculateService" Language="C#" %>
编译类库工程,新建一个文件夹叫做CalculateService,将Web.config, CalculateService.svc文件放在里面,另外在文件夹中新建bin文件夹,将编译后Debug目录下Contract.dll, Service.dll拷贝到其中。
打开IIS控制台,在默认站点下新建一个程序叫做CalculateService,虚拟目录指向新建的CalculateService文件夹地址。

注意因为我是基于.NET 4.5.2的环境开发的WCF服务,所以请将Application Pool选择为ASP.NET 4.0模式。通过浏览器访问WCF服务,

服务的调用和上面的控制台承载方式一致。代码点击这里下载。
感谢您的阅读!
WCF学习笔记之WCF初识的更多相关文章
- WCF学习笔记(2)-WCF的通讯过程
一.WCF中的ABC 场景:公司让你送一份合同文件,送文件的过程你可以选择的交通方式有打的,地铁或公交. 到了对方公司后,你要找到某负责人,并且要一份收到合同文件的回执和相应文件 要完成这项工作任务主 ...
- WCF学习笔记之事务编程
WCF学习笔记之事务编程 一:WCF事务设置 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元: WCF通过System.ServiceModel.TransactionFlowA ...
- WCF学习笔记之传输安全
WCF学习笔记之传输安全 最近学习[WCF全面解析]下册的知识,针对传输安全的内容做一个简单的记录,这边只是简单的记录一些要点:本文的内容均来自[WCF全面解析]下册: WCF的传输安全主要涉及认证. ...
- WCF 学习笔记之异常处理
WCF 学习笔记之异常处理 1:WCF异常在配置文件 <configuration> <system.serviceModel> <behaviors> <s ...
- WCF 学习笔记之双工实现
WCF 学习笔记之双工实现 其中 Client 和Service为控制台程序 Service.Interface为类库 首先了解契约Interface两个接口 using System.Service ...
- WCF学习之旅—WCF服务部署到IIS7.5(九)
上接 WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- WCF学习之旅—WCF服务的WAS寄宿(十二)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一) 八.WAS宿主 IIS ...
随机推荐
- phpstorm配置代码自动同步到服务器
首先找到你的菜单栏找到Tools 然后点击配置 填写你的服务器信息 填写好项目目录 选择自动上传
- 【Networking】Thrift and gRPC
参考资料: http://doc.oschina.net/grpc?t=60138 http://www.grpc.io/ https://thrift.apache.org/ https://git ...
- Jquery ajax调用webservice总结
jquery ajax调用webservice(C#)要注意的几个事项: 1.web.config里需要配置2个地方 <httpHandlers> <remove verb ...
- 转一篇Xcode中利用target编译不同版本的文章
http://www.cocoachina.com/ios/20160331/15832.html 主要说的是,不用自己定义debug宏,而是在xcode的编译配置文件中,设定debug宏,这样,不用 ...
- 1.SpringMVC的简介和环境搭建
SpringMVC的简介: SpringMVC 和 Struts一样是一个MVC框架,和Spring无缝连接,和struts2类似, Spring MVC属于SpringFrameWork的后续产品, ...
- jquery若干问题
1.获取服务器端的控件 $("#<%=photopath.ClientID%>").uploadPreview({ Img: "ImgPr", Wi ...
- eclipse远程调试Tomcat方法[转]
转载自:http://blog.csdn.net/afgasdg/article/details/9236877 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_O ...
- 安装Django,运行django-admin.py startproject 工程名,后不出现指定的工程解决办法!!
第一次写博客,,,,, 在看我这篇教程的前提是你应该已经正确装好python和Django了,好了,废话不说了,正题走你!你现在是不是很纠结自己运行django-admin.py startpr ...
- 修改VS2010生成的dll文件中的内容
我的电脑是64为的操作系统,所以先找到下面的路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 找到这个文件:ildasm.exe,如 ...
- struts2文件上传和下载
1. struts系统中的拦截器介绍 过滤器:javaweb中的服务器组件,主要针对的请求和响应进行拦截. 拦截器:主要针对方法的调用,进行拦截器,当使用代理对象调用某个方法时候 对方法的调用进行拦截 ...