第四章 绑定 选择一个合适的绑定
2010-11-04 14:02
183 查看
WCF中有9个预设绑定。这些绑定中的每一个都满足一个特殊分布式计算的需求。很多因素决定了为一个特殊应用选择哪一个绑定,包括安全,互通性,可信赖,性能和事务需求。表4.2 通过显示9种预设绑定支持的公共特性来进行比较。这张表可以用来为一个特定需求选择最好的绑定。
最常见的用来选择一个绑定的方法是检查你的应用程序需要的特性并由此确定一个满足那些需求的绑定。表4.2 比较了每一个预设绑定的特性以便于你可以基于自己的需求选择绑定。有很多特性,包括互操作,间隔,可信赖和事务。比如,如果你的应用程序需要在一个不可信赖的网络中通信,例如在一个无线网络连接中,你可能想要一个支持可靠会话(RS)的绑定。图片4.2 显示了你可能用来选择一个绑定的过程。
Table 4.2 Supported Features of Each Binding
![](http://hi.csdn.net/attachment/201011/4/0_1288850054jzBg.gif)
![](http://hi.csdn.net/attachment/201011/4/0_1288850090OGmY.gif)
RS*=由WS-Reliable 通信(WS-RM)定义的在一个已实现的SOAP可信赖消息中的WCF可靠会话。
当你在选择一个绑定时你需要考虑很多特性。表4.2 不能把它们全部列出来;因此,你可能需要做更进一步的研究来选择一个合适的绑定。
每一个绑定都支持一种特殊的通信场景,比如跨机器,本机和使用Web Services的互通通信。我们将检查与每个绑定一起的那些场景。也有其他的场景,比如集成安全和对等通信。这些主题应该做更深入的探讨并且会在第八章“安全”和第十二章“对等网络”中详细讨论。
示例程序
我们现在讲检查WCF中每一个预设绑定。为了说明每个绑定我们将使用一个基于stock quotes 的示例程序。示例请求基于一个票价并返回stock 价格。这个内容要在不同绑定中暴露并使用同样的服务,同时要注意代码和配置文件中的任意改动。列表4.4显示了stock quote 服务。
列表4.4 StockQuoteService 服务
列表4.5 显示了在Visual Studio 中通过添加服务引用生成的客户端代理。我们手工编辑代理代码来移除任何注释同时为了格式化目的将共同使用的命名空间添加using语句。不考虑这些微小的改动,这些代码与你通过添加服务引用或者svcutil.exe生成的代理代码是一样的。我们的目的是使用有这不同绑定的同样客户端代码并观察在代码或配置文件中的任何改动。
列表4.5 StockQuoteService 客户端代理
示例应用程序使用自我寄宿的方法来寄宿服务。列表4.6显示了自我寄宿StockQuoteService的代码。查看第七章“寄宿”来获取更多关于自我寄宿的内容。
列表4.6 StockQuoteService ServiceHost
最常见的用来选择一个绑定的方法是检查你的应用程序需要的特性并由此确定一个满足那些需求的绑定。表4.2 比较了每一个预设绑定的特性以便于你可以基于自己的需求选择绑定。有很多特性,包括互操作,间隔,可信赖和事务。比如,如果你的应用程序需要在一个不可信赖的网络中通信,例如在一个无线网络连接中,你可能想要一个支持可靠会话(RS)的绑定。图片4.2 显示了你可能用来选择一个绑定的过程。
Table 4.2 Supported Features of Each Binding
![](http://hi.csdn.net/attachment/201011/4/0_1288850054jzBg.gif)
![](http://hi.csdn.net/attachment/201011/4/0_1288850090OGmY.gif)
RS*=由WS-Reliable 通信(WS-RM)定义的在一个已实现的SOAP可信赖消息中的WCF可靠会话。
当你在选择一个绑定时你需要考虑很多特性。表4.2 不能把它们全部列出来;因此,你可能需要做更进一步的研究来选择一个合适的绑定。
每一个绑定都支持一种特殊的通信场景,比如跨机器,本机和使用Web Services的互通通信。我们将检查与每个绑定一起的那些场景。也有其他的场景,比如集成安全和对等通信。这些主题应该做更深入的探讨并且会在第八章“安全”和第十二章“对等网络”中详细讨论。
示例程序
我们现在讲检查WCF中每一个预设绑定。为了说明每个绑定我们将使用一个基于stock quotes 的示例程序。示例请求基于一个票价并返回stock 价格。这个内容要在不同绑定中暴露并使用同样的服务,同时要注意代码和配置文件中的任意改动。列表4.4显示了stock quote 服务。
列表4.4 StockQuoteService 服务
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace EssentialWCF { [ServiceContract] public interface IStockQuoteService { [OperationContract] double GetQuote(string symbol); } public class StockQuoteService : IStockQuoteService { public double GetQuote(string symbol) { double value; if (symbol == "MSFT") value = 31.15; else if (symbol == "YHOO") value = 28.10; else if (symbol == "GOOG") value = 450.75; else value = double.NaN; return value; } } }
列表4.5 显示了在Visual Studio 中通过添加服务引用生成的客户端代理。我们手工编辑代理代码来移除任何注释同时为了格式化目的将共同使用的命名空间添加using语句。不考虑这些微小的改动,这些代码与你通过添加服务引用或者svcutil.exe生成的代理代码是一样的。我们的目的是使用有这不同绑定的同样客户端代码并观察在代码或配置文件中的任何改动。
列表4.5 StockQuoteService 客户端代理
//------------------------------------------------------------------------------ // <auto-generated> // This code was generated by a tool. // Runtime Version:2.0.50727.4952 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // </auto-generated> //------------------------------------------------------------------------------ namespace Client.ServiceReference { [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServiceReference.IStockQuoteService")] public interface IStockQuoteService { [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IStockQuoteService/GetQuote", ReplyAction="http://tempuri.org/IStockQuoteService/GetQuoteResponse")] double GetQuote(string symbol); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] public interface IStockQuoteServiceChannel : Client.ServiceReference.IStockQuoteService, System.ServiceModel.IClientChannel { } [System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] public partial class StockQuoteServiceClient : System.ServiceModel.ClientBase<Client.ServiceReference.IStockQuoteService>, Client.ServiceReference.IStockQuoteService { public StockQuoteServiceClient() { } public StockQuoteServiceClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public StockQuoteServiceClient(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public StockQuoteServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public StockQuoteServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : base(binding, remoteAddress) { } public double GetQuote(string symbol) { return base.Channel.GetQuote(symbol); } } }
示例应用程序使用自我寄宿的方法来寄宿服务。列表4.6显示了自我寄宿StockQuoteService的代码。查看第七章“寄宿”来获取更多关于自我寄宿的内容。
列表4.6 StockQuoteService ServiceHost
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; namespace EssentialWCF { class Program { static void Main(string[] args) { MyServiceHost.StartService(); Console.WriteLine("Press <Enter> to terminate service!"); Console.ReadLine(); MyServiceHost.StopService(); } } internal class MyServiceHost { internal static ServiceHost myServiceHost = null; internal static void StartService() { myServiceHost = new ServiceHost(typeof(StockQuoteService)); myServiceHost.Open(); } internal static void StopService() { if (myServiceHost.State != CommunicationState.Closed) { myServiceHost.Close(); } } } }
相关文章推荐
- WCF 第四章 绑定 选择一个合适的绑定
- WCF 第四章 绑定 选择一个合适的绑定
- 第四章 Binding --选择合适的绑定
- WCF 第四章 绑定 创建一个自定义绑定
- 如何选择一个合适的创业公司加入?
- WCF 第四章 绑定 在多个绑定上暴露一个服务契约
- 如何选择一个合适的深度学习网络
- 下拉菜单绑定,再添加一个选项“请选择”
- 如何选择一个合适的邮件系统和邮箱软件?
- 如何选择一个合适的创业公司加入
- 第十章 Scala 容器(二):如何选择一个合适的容器类
- 如何选择一个合适的数据图表
- 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序。 给定一个int数组A,同时给定
- 一个主机绑定多ip如何选择ip出口
- 如何选择一个合适的创业公司加入?
- 在线教育,如何选择一个合适的视频云平台
- 怎样选择一个合适的nosqldatabase用在android上
- 为Android选择一个合适的架构
- 网赚,选择一个合适的联盟至关重要
- 在线教育,如何选择一个合适的视频云平台?