WCF 第一章 基础 使用代码生成WCF服务
2011-06-22 21:01 DanielWise 阅读(2735) 评论(0) 编辑 收藏 举报完成一个WCF服务,你要完成一个.NET 类然后使用System.ServiceModel 属性来修饰这个类。System.ServiceModel 命名空间与.NET 3.0 一起安装而且包含了大多数WCF实现。当代码编译时,CLR(公共语言运行库)解释这些属性,使用运行时代码取代它们。对于.NET来说属性并不是新事物; 在.NET 1.0 时它们已经存在了。WCF,就像.NET 1.0,1.1和2.0 中的ASMX,当写服务时使用属性来提高我们的生产力。
列表1.1 中显示了寄宿在控制台应用程序的WCF服务的完整代码。在这个例子中,我们做了以下工作。
定义契约。写一个.NET 类做一些有用的工作然后使用WCF属性修饰它。[ServiceContract]属性标识一个类为契约。在标准WSDL(网络服务描述语言)里,[ServiceContract]定义portType. [OperationContract]属性定义可以在类中通过服务接口反射调用的方法。同时定义了这些类的方法中使用的来往消息。WSDL描述,[OperationContract]定义了操作和消息。在1.1到1.3列表中使用一个仅有一个叫GetPrice方法的名为StockService 的类。
注意 这本书中的例子使用非常简单的接口,通常接收返回一个单独的字符串或数字。实际应用中,你的服务操作很可能接收返回复杂的类型。线上通信将会更“臃肿”而不是“健谈”,降低了网络传输和回复能力。这需要在每次调用时传输更多信息,需要复杂的输入和返回值类型。 |
定义一个终结点。在终结点定义中,我们将通过使用ServiceHost.AddServiceEndpoint 方法确定一个地址,绑定和契约.地址是空的,意味着终结点的地址和基地址或者服务的相同。绑定类型是basicHttpBinding,与使用WS-I BP 1.1 协议构建的XML Web Services 兼容,可以互操作。WS-I 或Web Services, 是几大主要的系统厂商合作的结果,包括微软,IBM,BEA,Oracle以及其他一些组织,定义了共同协议层次。WS-I 不是定义了标准;它提供了指导以及工具去确认软件是否符合现存标准,比如HTTP 和XML.
在一个进程中寄宿服务以便于它可以监听新来的请求。在1.1到1.3列表中使用ServiceHost 类在控制台应用程序中寄宿服务。服务在http://localhost:8000/EssentialWCF 处监听。
列表 1.1 完全使用代码实现服务
using System; using System.ServiceModel; namespace EssentialWCF { [ServiceContract] public interface IStockService { [OperationContract] double GetPrice( string ticker); } public class StockService : IStockService { public double GetPrice( string ticker) { return 94.85; } } public class service { public static void Main() { ServiceHost serviceHost = new ServiceHost( typeof (StockService), new Uri( "http://localhost:8000/EssentialWCF" )); serviceHost.AddServiceEndpoint( typeof (IStockService), new BasicHttpBinding(), "" ); serviceHost.Open(); Console.WriteLine( "Press <Enter> to terminate.\r\n" ); Console.ReadLine(); serviceHost.Close(); } } } |
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述