wcf服务编程(一)
2024-09-01 01:34:11
步骤一:定义契约
[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();
}
最新文章
- AngularJS的小知识点
- redis master配置了密码进行主从同步
- sql server系统表详细说明
- C# Redis
- 手机端的tab切换,响应式切换效果
- Hie with the Pie(POJ 3311状压dp)
- Python零散收集:
- instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别
- android源码 分享1
- 201521123093 JAVA程序设计
- http_load压力测试windows版使用方法及结果分析
- MYSQL中默认隐式事务及利用事务DML
- vue 导航栏切换
- ISDN简记
- .NET中的许可证机制--License
- 03-树3 Tree Traversals Again(25 分)
- WP8.1学习系列(第二十四章)——Json解析
- <;youcengcibianli>;
- Azure 镜像市场虚拟机映像制作指南
- Python标准库笔记(10) — itertools模块
热门文章
- 毕业设计之感悟 —— UML 与 ER 图
- 一步一步造个IoC轮子(三):构造基本的IoC容器
- php 获取今日、昨日、本周,上周、本月,上月,季度的起始时间戳和结束时间戳的方法
- SqlServer 可更新订阅队列读取器代理错误:试图进行的插入或更新已失败
- Window文件目录遍历 和 WIN32_FIND_DATA 结构(非常详细的中文注释)
- Azure 云助手主要功能
- Markdown的选择
- Controls 属性与继承 TShape 类的小练习(使用TShape可以解决很多图形问题)
- 在windows下的QT编程中的char*,wchar_t*与QString之间的转换(利用reinterpret_cast和_stprintf函数,fromWCharArray从字符数组里读取数据)
- dedecms自学