步骤一:定义契约

[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(, ));
Console.WriteLine("5-5={0}", calcuator.Subtract(, ));
Console.WriteLine("5*5={0}", calcuator.Multiply(, ));
Console.WriteLine("5/5={0}", calcuator.Divide(, ));
}
Console.Read();
}

最新文章

  1. AngularJS的小知识点
  2. redis master配置了密码进行主从同步
  3. sql server系统表详细说明
  4. C# Redis
  5. 手机端的tab切换,响应式切换效果
  6. Hie with the Pie(POJ 3311状压dp)
  7. Python零散收集:
  8. instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别
  9. android源码 分享1
  10. 201521123093 JAVA程序设计
  11. http_load压力测试windows版使用方法及结果分析
  12. MYSQL中默认隐式事务及利用事务DML
  13. vue 导航栏切换
  14. ISDN简记
  15. .NET中的许可证机制--License
  16. 03-树3 Tree Traversals Again(25 分)
  17. WP8.1学习系列(第二十四章)——Json解析
  18. &lt;youcengcibianli&gt;
  19. Azure 镜像市场虚拟机映像制作指南
  20. Python标准库笔记(10) — itertools模块

热门文章

  1. 毕业设计之感悟 —— UML 与 ER 图
  2. 一步一步造个IoC轮子(三):构造基本的IoC容器
  3. php 获取今日、昨日、本周,上周、本月,上月,季度的起始时间戳和结束时间戳的方法
  4. SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败
  5. Window文件目录遍历 和 WIN32_FIND_DATA 结构(非常详细的中文注释)
  6. Azure 云助手主要功能
  7. Markdown的选择
  8. Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
  9. 在windows下的QT编程中的char*,wchar_t*与QString之间的转换(利用reinterpret_cast和_stprintf函数,fromWCharArray从字符数组里读取数据)
  10. dedecms自学