WCF 应用实例
工程结构如图所示
创建契约 IService(类库)
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace IService
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
int Add(int x, int y);
[OperationContract]
int Subtract(int x, int y);
}
}
拓展:ServiceContract的属性
拓展:OperationContract的属性
创建服务代理 ServiceHost (控制台)
using IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace Service
{
internal class Program
{
static void Main(string[] args)
{
using(ServiceHost serviceHost = new ServiceHost(typeof(Calculator)))
{
serviceHost.Open();
Console.WriteLine("Service Host is opened");
Console.ReadKey();
serviceHost.Close();
}
}
}
public class Calculator : ICalculator
{
public int Add(int x, int y)
{
return x + y;
}
public int Subtract(int x, int y)
{
return x - y;
}
}
}
代理服务的难点是对服务端的配置:App.config
这个可以自己写config,也可以应用Visual Studio 的WCF服务配置工具生成
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="NewBehavior0">
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="NewBehavior0" name="Service.Calculator">
<endpoint address="http://localhost:8000" binding="basicHttpBinding"
bindingConfiguration="" name="endpoint1" contract="IService.ICalculator" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="endpoint2" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
WCF服务配置工具生成的步骤
Step1.新建配置
Step2.新建服务
Step3.服务类型
Step4.导入契约
Step5.指定终结点地址(由于默认选择是http方式)
Step6.创建服务行为
Step7.服务的行为配置
Step8.终结点
Step9.创建基地址
Step10.生成App.config,并替换控制台的App.config
创建客户端 (控制台)
客户端元数据的获取有两种方式 :1.服务引用,2.svcutil.exe,下面分别介绍使用。
获取元数据的前提:一定要用【管理员】权限,运行服务代理。
1.服务引用
此时自动生成了 客户端config和相关接口的实现
Client代码
using Client1.ServiceReference1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Client1
{
internal class Program
{
static void Main(string[] args)
{
CalculatorClient client = new CalculatorClient("endpoint1");//endpointConfigName
int i = client.Add(19, 1);
Console.WriteLine(i);
Console.ReadLine();
}
}
}
2.svcutil.exe
找到svcutil.exe的路径,并在当前路径下输入cmd
输入命令行
生成Calculator.cs 和output.config。将Calculator.cs 添加到client工程中,output.config的内容替换到app.config中,即可。