wcf服务编程(一)
步骤一:定义契约
[ServiceContract] //定义服务契约 需要引用System.ServiceModel 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); }
步骤二:创建服务
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; } }
步骤三:服务寄宿(通过控制台寄宿)
static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(CalculatorService))) // 承载服务 { host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://localhost:3721/CalculatorService"); // 增加节点到承载服务,参数是:契约、绑定、地址 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) { ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); //定义服务行为 behavior.HttpGetEnabled = true; //是否发布服务元数据,方便使用GET-HTTP进行检索 behavior.HttpGetUrl = new Uri("http://localhost:3721/CalculatorService/metadata"); //获取或设置元数据的发布地址 host.Description.Behaviors.Add(behavior); //添加服务行为到承载服务 } host.Opened += delegate { Console.WriteLine("服务已经开启,按任意键终止"); }; host.Open(); Console.Read(); } }
步骤四:服务端通过配置文件配置服务
xml:
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="metadataBehavior"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:3722/CalculatorService/metadata"/> </behavior> </serviceBehaviors> </behaviors> <services> <service name="Service.CalculatorService" behaviorConfiguration="metadataBehavior"> <endpoint address="http://127.0.0.1:3722/CalculatorService" binding="wsHttpBinding" bindingConfiguration="" name="Test" contract="Service.Interface.ICalculator" /> </service> </services> </system.serviceModel> </configuration>
c#
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(CalculatorService))) // 承载服务
{
host.Opened += delegate
{
Console.WriteLine("服务已经开启,按任意键终止");
};
host.Open();
Console.Read();
}
}
步骤五:客户端调用 (不通过代理类的方式)
static void Main(string[] args) { //客户端调用,不通过代理类,通过ChannelFactory直接创建服务代理对象 //条件:需要引用契约动态库 using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(new WSHttpBinding(), "http://127.0.0.1:3722/CalculatorService")) { ICalculator calcuator = channelFactory.CreateChannel(); //创建服务代理对象 Console.WriteLine("5+5={0}", calcuator.Add(5, 5)); Console.WriteLine("5-5={0}", calcuator.Subtract(5, 5)); Console.WriteLine("5*5={0}", calcuator.Multiply(5, 5)); Console.WriteLine("5/5={0}", calcuator.Divide(5, 5)); } Console.Read(); }