我们知道,在WCF中,可以实现许多相应的功能,来帮助我们轻松的解决一些比较复杂的问题。在这里我们就一起来了解一下有关WCF实现SOA的相关方法,以方便我们在实际应用中来获得些帮助。#t#
WCF实现SOA的一个关键问题是,如何将与技术无关的服务转换为CLR。一旦提供了这种转换,WCF的服务设计者与开发者就可以根据自己拥有的CLR的知识,进行WCF面向服务开发。为两者搭建桥梁的是宿主。一个宿主可以包含多个上下文,而在上下文中则可以包含服务实例。特殊的,宿主的上下文也可以为空。
客户端若要调用服务,可以采用代理或通道的方式。这两种方式在很多资料上已经有了详尽的介绍。在这里,我不准备重复。如果需要详细了解甚至掌握着两种方式,当然可以购买Programming WCF Services一书一探究竟。这里我想介绍的是本书中频繁使用的一种简化WCF类库的一个示例,主要是引入泛型来简化以及各种步骤地自动化处理。例如ServiceHost<T>类,就是通过引入泛型简化了WCF实现SOA提供的ServiceHost类:
- public class ServiceHost<T> : ServiceHost {
- public ServiceHost( ) : base(typeof(T)) {}
- public ServiceHost(params string[] baseAddresses) :
base(typeof(T),Convert(baseAddresses)) {}- public ServiceHost(params Uri[] baseAddresses) :
base(typeof(T),baseAddresses) {}- static Uri[]
- Convert(string[] baseAddresses) {
- Converter<string,Uri> convert = delegate(string address)
{ return new Uri(address); };- return Array.ConvertAll(baseAddresses,convert);
- } }
如果是使用ServiceHost类,则托管服务的代码如下所示:
- public static void Main( ) {
- Uri baseAddress = new Uri("http://localhost:8000/");
- ServiceHost host = new ServiceHost(typeof(MyService),baseAddress);
- host.Open( );
- //Can do blocking calls: Application.Run(new MyForm( ));
- host.Close( );
- }
使用ServiceHost类,则可修改为:
- public static void Main( ) {
- Uri baseAddress = new Uri("http://localhost:8000/");
- ServiceHost<MyService> host = new ServiceHost<MyService>(baseAddress);
- host.Open( );
- //Can do blocking calls:
- Application.Run(new MyForm( ));
- host.Close( );
- }
在ServiceHost<T>类的实现中,使用了.NET 2.0中才引入的一个方法Array.ConvertAll(),它的方法签名为:
- public static TOutput[]
- ConvertAll<TInput,TOutput> ( TInput[] array,
Converter<TInput,TOutput> converter )
它能够根据Converter对象将一种类型的数组转换为另一种类型的数组。
以上就是对WCF实现SOA的相关步骤的介绍。