总体步骤如下:
1 定义服务契约
2 wcf服务实现
3 编写wcf服务的配置文件
4 把wcf相关文件寄宿到iis上
5 新建客户端测试是否成功
详细步骤如下:
1 定义服务契约
1.1 新建一个类库项目,名为Contracts,添加引用System.ServiceMode
1.2 把系统自动创建的类给删除了,新建一个接口,名为ICalculator,并编写如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace Contracts
{
//CalculatorService名称自己起,http://www.artech.com也是自己起,为了避免不出错,建议同我的一样
[ServiceContract(Name="CalculatorService",Namespace="http://www.artech.com")]
public interface ICalculator
{
[OperationContract]
double Add(double x, double y);
[OperationContract]
double Subtract(double x, double y);
[OperationContract]
double Multiply(double x, double y);
[OperationContract]
double Divide(double x, double y);
}
}
业务逻辑很简单,就是加减乘除
2 wcf服务实现
2.1 新建一个类库项目,名为Services,并添加对类库项目Contracts的引用和引用System.ServiceMode
2.2 把系统自动新建的类改名为CalculatorService,并在该类中对服务的实现,具体代码如下:
using Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Services
{
public class CalculatorService:ICalculator
{
public double Add(double x, double y)
{
return x + y;
}
public double Subtract(double x, double y)
{
return x - y;
}
public double Multiply(double x, double y)
{
return x * y;
}
public double Divide(double x, double y)
{
return x / y;
}
}
}
2.3 鼠标右键当前项目,然后点击生成,这样你会在当前项目的Bin/Debug目录下看到Services.dll和Contracts.dll两个类库文件,把它们放到一个新建的Bin目录下备用。为什么是Bin目录呢?因为Web应用在运行时会默认从Bin目录加载程序集
3 编写wcf服务的配置文件
3.1 新建一个名为CalculatorService.svc的文件,并编写如下:
<%@ ServiceHost Service="Services.CalculatorService" %>
其中Services.CalculatorService的Services代表命名空间,CalculatorService是服务类名
3.2 新建一个配置文件,名为Web.config,并编写如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="Services.CalculatorService">
<endpoint address="http://192.168.128.1:9090/CalculatorService.svc" binding="wsHttpBinding" contract="Contracts.ICalculator" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
需要特别注意的地方是:
i: http://192.168.128.1:9090/CalculatorService.svc 中的192.168.1.128是你iis网站的ip地址,9090是你新建iis网站时自己设置的端口
ii: Services.CalculatorService中的Services是服务类所在的命名空间,CalculatorService是实现服务的类的名称
iii: Contracts.ICalculator中的Contracts是契约类所在的命名空间,ICalculator是契约类的名称
4 在你喜欢的盘符中新建一个文件夹,名称为WCF(名称自己起),把前面的Bin文件夹、文件CalculatorService.svc、文件Web.config拷贝到WCF文件夹中
5 搭建iis,具体步骤就不详细说明了,不懂的可以参考https://jingyan.baidu.com/article/5553fa8215f7ef65a2393413.html,在搭建iis之前,需要先完成步骤5.2
这里我讲需要注意的地方:
5.1 网站文件路径选的是你刚才WCF文件夹所在的路径
5.2 需要注册asp.net(之前如果你注册过就不用了),步骤如下:
32位的Windows:
---------------------------------------------------------------------------
1. 运行->cmd
2. cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
3. aspnet_regiis.exe -i
64位的Windows:
---------------------------------------------------------------------------
1. 运行->cmd
2. cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
3. aspnet_regiis.exe -i
5.3 添加WCF文件夹为网站的虚拟目录,名称为wcfservice,如下图:
5.4 在内容视图中选择CalculatorService.svc,然后浏览,如下图:
5.5 然后自动打开浏览器,如下在浏览器中看到如下图内容,则表明成功了,如下图:
6 新建客户端程序测试是否成功
6.1 新建控制台应用程序,名为Client,并添加对类库项目Contracts的引用和引用System.ServiceMode
6.2 在主程序中编写如下:
using Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace Client
{
class Program
{
static void Main(string[] args)
{
using (ChannelFactory<ICalculator> ChannelFactory = new ChannelFactory<ICalculator>(new WSHttpBinding(), "http://192.168.128.1:9090/CalculatorService.svc"))
{
ICalculator proxy = ChannelFactory.CreateChannel();
using (proxy as IDisposable)
{
Console.WriteLine("2+3=" + proxy.Add(2, 3).ToString());
Console.WriteLine("2-3=" + proxy.Subtract(2, 3).ToString());
Console.WriteLine("2*3=" + proxy.Multiply(2, 3).ToString());
Console.WriteLine("2/3=" + proxy.Divide(2, 3).ToString());
Console.ReadKey();
}
}
}
}
}
注意:里面的http://192.168.128.1:9090/CalculatorService.svc的ip和端口一定要一一与iis服务端中的对应
6.3 运行,如下:
到此,步骤全部完成。