您的位置:首页 > 其它

WCF学习笔记之WCF初识

2016-02-14 22:11 471 查看
这篇博客将介绍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(2,3));
Console.WriteLine(proxy.Divide(2, 3));
Console.WriteLine(proxy.Multiply(2, 3));
Console.WriteLine(proxy.Subtract(2, 3));

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服务,



服务的调用和上面的控制台承载方式一致。代码点击这里下载。

感谢您的阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: