精华内容
下载资源
问答
  • 银光志--Silverlight 3.0开发详解与最佳实践-第3章光盘...笔者尽可能的在《银光志--Silverlight 3.0开发详解与最佳实践》里的范例中提供让读者深入了解开发经验和学习有针对性的相关技术,例如:LINQ、WCF、SOCKET等。
  • 对于一些B/S程序员来说,这些看似在B/S应用程序中简单的...笔者尽可能的在《银光志--Silverlight 3.0开发详解与最佳实践》里的范例中提供让读者深入了解开发经验和学习有针对性的相关技术,例如:LINQ、WCF、SOCKET等。
  • WCF

    2020-10-27 14:11:17
    是Windows平台上开发分布式应用最佳实践方式。简单的归结为四大部分: 1.网络服务的协议,即用什么网络协议开放客户端接入。 2.业务服务的协议,即声明服务提供哪些业务。 3.数据类型声明,即对客户

    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTPFTP的相关技术。是Windows平台上开发分布式应用最佳的实践方式。简单的归结为四大部分:

    1.网络服务的协议,即用什么网络协议开放客户端接入

    2.业务服务的协议,即声明服务提供哪些业务

    3.数据类型声明,即对客户端与服务器端通信的数据部分进行一致化

    4.传输安全性相关的定义。

    它是.NET框架的一部分,由 .NET Framework3.0 开始引入,与Windows Presentation Foundation及Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。在 .NET Framework2.0 以及前版本中,微软发展了 Web Service(SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。

    概念

    WCF 由于集合了几乎由.NET Framework提供的所有的通信方法,因此学习曲线比较陡峭,开发人员必须要针对各个部分的内涵做深入的了解,才能够操控 WCF 来开发应用程序。

    通信双方的沟通方式,由合约来订定。通信双方所遵循的通信方法,由协议绑定来订定。通信期间的安全性,由双方约定的安全性层次来订定。

    ​​​​​​契约

    WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。合约分成了四种:

    数据契约(Data Contract),订定双方沟通时的数据格式。服务契约(Service Contract),订定服务的定义。操作契约(Operation Contract),订定服务提供的方法。消息契约(Message Contract),订定在通信期间改写消息内容的规范。一个 WCF 中的契约,就如同下列代码所示:

    using System;
    using System.ServiceModel;
    namespace Microsoft.ServiceModel.Samples{
    [ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] // 服务契约
    public interface ICalculator
    {
    [OperationContract] // 操作契约
    double Add(double n1, double n2);
    [OperationContract] //操作契约
    double Subtract(double n1, double n2);
    [OperationContract] // 操作契约
    double Multiply(double n1, double n2);
    [OperationContract] //操作契约
    double Divide(double n1, double n2);
    }
    }

    协议绑定

    由于 WCF 支持了HTTPTCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,而 HTTP 又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致

    一个设置通信协议绑定的示例如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.serviceModel>
    <!-- 设定服务系统的资讯 -->
    <services>
    <service name=" CalculatorService" >
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="ICalculator" /><!--端口配置-->
    </service>
    </services>
    <!-- 设定通讯协定系统的资讯 -->
    <bindings>
    <wsHttpBinding>
    <binding name="Binding1">
    </binding>
    </wsHttpBinding>
    </bindings>
    </system.serviceModel>
    </configuration>

    虽然 WCF 也可以使用SOAP做通信格式,但它和以往的ASP. NETXML Web Services不同,因此有部分技术文章中,会将 ASP. NET 的 XML Web Services 称为ASMX Service

    WCF 的服务可以挂载于 Console Application,Windows Application,IIS (ASP. NET) Application,Windows Service以及Windows Activation Services中,但大多都会挂在 Windows Service

    安全性层次

    WCF 实现上已经支持了传输层次安全性 (Transport-level security) 以及消息层次安全性 (Message-level security) 两种。

    传输层次安全性:在数据传输时期加密,例如 SSL。消息层次安全性:在数据处理时就加密,例如使用数字签名,散列或是使用密钥加密等。

    客户端

    对于 WCF 的客户端来说,WCF 服务就像是一个 Web Service 一样,在 Visual Studio 2008 中,所有 WCF 服务的连接都是由客户端的 服务代理(WCF Service Proxy,服务代理屏蔽通讯细节) 来运行,开发人员不用花费太多心思在通信上,而 WCF Service Proxy 在 Visual Studio 中被称为服务引用(Service Reference)

    在 Visual Studio 中加入 WCF 的服务引用时,Visual Studio 会自动帮开发人员做掉一些必要工作(例如组态创建以及产生 Service Proxy 等),开发人员只需要在代码中取用 WCF Service Proxy 对象即可。

    WCF的优势

    在David Chappell所撰的《Introducing Windows Communication Foundation》一文中,用了一个活鲜鲜的例子,来说明WCF的优势所在。假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多种应用程序访问,包括呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application)

    从功能的角度来看,WCF完全可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的并集。(注:这种说法仅仅是从功能的角度。事实上WCF远非简单的并集这样简单,它是真正面向服务的产品,它已经改变了通常的开发模式。)因此,对于上述汽车预约服务系统的例子,利用WCF,就可以解决包括安全、可信赖、互操作、跨平台通信等等需求。开发者再不用去分别了解.Net Remoting,ASMX等各种技术了。

    概括地说,WCF具有如下的优势:

    1、统一性

    前面已经叙述,WCF是对于ASMX,.Net Remoting,Enterprise Service,WSEMSMQ等技术的整合。由于WCF完全是由托管代码编写,因此开发WCF的应用程序与开发其它的.Net应用程序没有太大的区别,我们仍然可以像创建面向对象的应用程序那样,利用WCF来创建面向服务的应用程序。

    2、互操作性

    由于WCF最基本的通信机制是SOAP(Simple Object Access Protocol 简易对象访问协议),这就保证了系统之间的互操作性,即使是运行不同的上下文中。这种通信可以是基于.Net到.Net间的通信,如下图所示:

    可以跨进程、跨机器甚至于跨平台的通信,只要支持标准的Web Service,例如J2EE应用服务器(如WebSphere,WebLogic)。应用程序可以运行在Windows操作系统下,也可以运行在其他的操作系统,如Sun Solaris,HP Unix,Linux等等。如下图所示:

    3、安全与可信赖

    WS-Security,WS-TrustWS-SecureConversation均被添加到SOAP消息中,以用于用户认证数据完整性验证,数据隐私等多种安全因素。

    在SOAP 的header中增加了WS-ReliableMessaging允许可信赖的端对端通信。而建立在WS-Coordination和WS- AtomicTransaction之上的基于SOAP格式交换的信息,则支持两阶段的事务提交(two-phase commit transactions)。

    上述的多种WS-Policy在WCF中都给与了支持。对于Messaging而言,SOAP是Web Service的基本协议,它包含了消息头(header)和消息体(body)。在消息头中,定义了WS-Addressing用于定位SOAP消息的地址信息,同时还包含了MTOM(消息传输优化机制,Message Transmission Optimization Mechanism)。

    4、兼容性

    WCF充分的考虑到了与旧有系统的兼容性。安装WCF并不会影响原有的技术如ASMX和.Net Remoting。即使对于WCF和ASMX而言,虽然两者都使用了SOAP,但基于WCF开发的应用程序,仍然可以直接与ASMX进行交互。

    WCF程序结构

    1. 契约(Contracts):主要定义了实现那些服务,如何访问服务

    2. 服务(Services):实现契约定义的方法

    3. 宿主程序(Hosting):提供低层传输功能的支持

    4. 客户端(Client):根据契约访问服务

    结构分析

    契约(所谓契约就是接口)

    namespace WcfStudy
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyFirstSerice”。
        [ServiceContract]
        public interface IMyFirstSerice
        {
            [OperationContract]
            string SayHello(string name);
        }
    }

    服务(所谓服务就是接口实现)

    namespace WcfStudy
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyFirstSerice”。
        // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 MyFirstSerice.svc 或 MyFirstSerice.svc.cs,然后开始调试。
        public class MyFirstSerice : IMyFirstSerice
        {
            public string  SayHello(string name)
            {
                 return  "Hello "+name;
            }
        }
    }

    宿主程序

    WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。

    WCF服务应用程序与WCF服务库的不同

    WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板基于IIS托管的程序

    WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web项目中应用的类库。我们需要为此服务库添加一个宿主

    WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。

    如何为wcf添加一个宿主?

    1.使用控制台应用程序作为wcf宿主

    //创建宿主的基地址
                Uri baseAddress = new Uri("http://localhost:8080/User");
                //创建宿主
                using (ServiceHost host = new ServiceHost(typeof(User), baseAddress))
                {
                    //向宿主中添加终结点
                    host.AddServiceEndpoint(typeof(IUser), new WSHttpBinding(), "");
                    //将HttpGetEnabled属性设置为true
                    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                    smb.HttpGetEnabled = true;
                    //将行为添加到Behaviors中
                    host.Description.Behaviors.Add(smb);
                    //打开宿主
                    host.Open();
                    Console.WriteLine("WCF中的HTTP监听已启动....");
                    Console.ReadLine();
                    host.Close();
                }

    为客户端添加wcf服务引用

    image

    public ActionResult GetWcfResult()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult GetWcfResult(string name)
            {
                //UserClient userClient = new UserClient();
                MyFirstSericeClient myFirstSericeClient = new MyFirstSericeClient();
                string temp = myFirstSericeClient.SayHello(name);
                ViewBag.username = temp;
                return View();
            }

    在mvc客户端中调用wcf服务

    MyFirstSericeClient是在客户端添加服务引用后生成的,其命名规则是为服务名+Client

    基本类似的添加宿主服务和上边差不多,总之wcf一定是要寄宿在宿主程序中去的

    客户端

    这里使用一个简单的mvc例子作为客户端,客户端只需要添加服务引用后即可对wcf服务使用

    WCF非常好的上屏蔽了低层细节(服务器和客户端之间的通信、数据传输等),开发者只需要关注业务逻辑即可,并且非常灵活

    展开全文
  • 使用asp.net和wCF4.0开发RESTful服务

    热门讨论 2016-03-17 16:55:26
    一.什么是wcf? 百度百科的定义: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践

    一.什么是wcf?

    百度百科的定义

    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
    整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。
    是Windows平台上开发分布式应用最佳的实践方式。
    简单的归结为四大部分
    1>.网络服务的协议,即用什么网络协议开放客户端接入。
    2>.业务服务的协议,即声明服务提供哪些业务。
    3>.数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。
    4>.传输安全性相关的定义。它是.net框架的一部分,由 .NET Framework3.0 开始引入,与Windows Presentation Foundation及Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。在.net framework 2.0 以及前版本中,微软发展了 web service (SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。
    优势:统一性、互操作性、安全与可依赖性、兼容性。

    二.什么是RESTful?
    1.一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
    2.RESTful的关键是定义可表示流程元素/资源的对象。在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。

    REST使用一些常见的HTTP方法来插入、删除、更新、返回信息,这些方法如下:

    GET - 请求针对资源的特定表达式

    PUT - 根据提供的表达式创建或者更新一个资源

    DELETE - 删除指定的资源

    POST - 提交数据来让指定的资源处理 

    3.为何使用?

    ① 更少的开销(对于每次调用不需要包裹SOAP外壳)

    ②更少的重复(HTTP已经提供了诸如DELETE、PUT、GET等等的方法,否则将表现在一个SOAP外壳当中)。

    ③更标准化 - HTTP方法很容易理解并且操作一致。一些SOAP实现可能变得过分挑剔。

    ④对于人类有更强的可读性和可测试性(很难仅仅用一个浏览器来测试SOAP)。

    ⑤不需要使用XML(好吧,对于SOAP貌似也不需要使用,不过这很难成立,因为你已经开始解析外壳了)

    ⑥库使得SOAP(有点)容易。但正如我提到的,你正在抽出大量的底层冗余。确实,在理论上,在避免装载功能相同的顶层这一项上,SOAP能够超过其他的转换;但是在现实中你可能做的几乎所有SOAP工作,都是通过HTTP的。 



    三.使用asp.net和wCF4.0开发RESTful服务
    第一步:1.新建一个类项目

    2.建取三个类

    一个IBookService.cs接口,代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    using System.Threading.Tasks;
    using WCFClass.Model;
    
    namespace WCFClass
    {
    
        [ServiceContract]
        public interface IBookService
        {
            [OperationContract]
            [WebGet(ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/GetBookPrice/For/BookCode/{bookCode}")]
            Book GetPriceByBookCode(string bookCode);
    
            [OperationContract]
            [WebGet (RequestFormat = WebMessageFormat.Xml,
                ResponseFormat = WebMessageFormat.Xml,
                BodyStyle = WebMessageBodyStyle.Bare,
                UriTemplate = "/GetBookPrice/For/City/{city}")]
            Book GetPriceByCity(string city);
    
        }
    }
    

    WebGet属性

    WebGet属性让我们能够定制在处理REST服务的过程中,如何处理HTTP的GET方法。如例子所示,我们在URL中呈现GET方法,并且我们期待返回一些POX(简单的旧式XML)结果。

    • 请求格式:是发起请求的格式。两个选项是XML和JSON。如果你从浏览器请求,你的请求将会被重视。
    • 响应格式:是返回的格式。两个选项是XML和JSON。在这里我们定制我们想要通过XML返回。
    • 数据体样式:展现了我们希望怎样返回数据。

    UriTemplate描述了我们将如何处理 Uri映射。这个例子中,我们声明了基地址(BaseAddress)之后的URL看起来是下面这样的:
    /GetBookPrice/For/BookCode/{bookCode}

    这就是服务合同,为我们REST服务实现了两个方法。一个通过城市名字得到书的价格,另一个通过书编号获得。


    BookService.cs代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel.Activation;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WCFClass
    {
       [AspNetCompatibilityRequirements(
            RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
        public class BookService:IBookService
        {
    
            public Model.Book GetPriceByBookCode(string bookCode)
            {
                switch (bookCode)
                {
                    case "00000":
                        return new Model.Book() { Name = "None", Price = 20.12 };
                    case "12345":
                        return new Model.Book() { Name = "WCF Learning", Price = 40.12 };
                    case "11111":
                        return new Model.Book() { Name = "RestFul Guide", Price = 30.12 };
                    default:
                        return new Model.Book() { Name = "ES", Price = 50.12 };
    
                }
            }
    
            public Model.Book GetPriceByCity(string city)
            {
                switch (city)
                {
                    case "shanghai":
                        return new Model.Book() { Name = "None", Price = 20.12 };
                    case "beijing":
                        return new Model.Book() { Name = "WCF Learning", Price = 40.12 };
                    case "wuhan":
                        return new Model.Book() { Name = "RestFul Guide", Price = 30.12 };
                    default:
                        return new Model.Book() { Name = "ES", Price = 50.12 };
    
                }
            }
        }
    }
    
    Model.Book.cs代码如下
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WCFClass.Model
    {
        [DataContract]
        public class Book
        {
            [DataMember]
            public string Name
            {
                get;
                set;
            }
            [DataMember]
            public string Code
            {
                get;
                set;
            }
            [DataMember]
            public double Price
            {
                get;
                set;
            }
        }
    }
    
    第二步:1.创建一个web应用程序

    2.建立全局Global.asax 代码如下:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel;
    using System.ServiceModel.Web;
    using System.Text;
    using System.Threading.Tasks;
    using WCFClass.Model;
    
    namespace WCFClass
    {
    
        [ServiceContract]
        public interface IBookService
        {
            [OperationContract]
            [WebGet(ResponseFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/GetBookPrice/For/BookCode/{bookCode}")]
            Book GetPriceByBookCode(string bookCode);
    
            [OperationContract]
            [WebGet (RequestFormat = WebMessageFormat.Xml,
                ResponseFormat = WebMessageFormat.Xml,
                BodyStyle = WebMessageBodyStyle.Bare,
                UriTemplate = "/GetBookPrice/For/City/{city}")]
            Book GetPriceByCity(string city);
    
        }
    }
    
    3.web.config中 添加代码:
      <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
                 multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
    最终运行:

    参照:http://www.oschina.net/translate/developing-restful-service-with-wcf-4-0-using-asp

    展开全文
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • 本书是国内第一本伞面介绍微软Silverlight最新版本技术基础和开发实践的书籍,不仅涵盖面广,内容也有足够的深度。 在RIA应用程序开发中,程序员和设计师角色的分工各不相同,针对这一点,微软提供了相对应的...
  • Ddas is a Data Driven Application Sample and Best Practice. A very easy and clear sample for developer to share and study ...VS2008 / c# / Asp.net / WCF / asp.net Ajax preview 3 / XFramework / SQL 2000
  • 初见WCF

    热门讨论 2015-12-13 20:46:37
    WCF定义: WCF定义 WCF是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践方式。 WCF内容: 1>.网络服务的协议,即用什么网
    WCF定义:
    WCF定义
    WCF是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。
    整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTPFTP的相关技术。
    是Windows平台上开发分布式应用最佳的实践方式。
    WCF内容:
    1>.网络服务的协议,即用什么网络协议开放客户端接入。
    2>.业务服务的协议,即声明服务提供哪些业务。
    3>.数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。
    4>.传输安全性相关的定义。它是.NET框架的一部分,由 .NET Framework3.0 开始引入,与Windows Presentation Foundation及Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。在 .NET Framework2.0 以及前版本中,微软发展了 Web Service(SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。
    WCF的框架


    WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成。
    宿主:WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
    地址(Address):地址决定了服务的位置,解决了服务寻址的问题。
    绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行的相应处理。
    契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。
    小结:近期跟着期的师哥师姐做ITOO的项目,就慢慢的接触到这一块的知识,现在理解的还是特别的浅,就个人而言在这些天的搭建框架的过程中来说,用这个WCF还真是有点困难。很陌生,但我相信给我一点点的时间我终会熟悉他,运用它。毕竟WCF不就是一个凭借终结点提供软件开发服务的软件开发包而已嘛。

    展开全文
  • WCFWCF框架学习

    千次阅读 热门讨论 2017-02-20 20:54:13
    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台,本质是一套软件开发包,与平台无关,即可以实现跨平台服务,是Windows平台上开发分布式...

    WCF介绍

            Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台,本质是一套软件开发包,与平台无关,即可以实现跨平台服务,是Windows平台上开发分布式应用最佳的实践方式。
           简单的归结为四大部分:
    1、网络服务的协议,即用什么网络协议开放客户端接入。
    2、业务服务的协议,即声明服务提供哪些业务。
    3、数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。
    4、传输安全性相关的定义。

    WCF学习


    服务三要素

            这里我们主要学习WCF的三个服务要素:契约、绑定和地址。

    契约

           契约的本质就是用来定义服务的。从SOA系统来看,属于服务公开接口的一部分。一个服务契约,定义了服务端公开的服务方法,使用传输协议,可访问地址,传输的消息格式等内容。即契约描述了该服务的功能和作用,告诉SOA系统中的其他节点这个服务是干什么的。

    服务契约

           以ServiceContract标识,一般设置为接口,但也可以是类。ServiceContract用来标识需要加入服务的内容(类或结构),代表其被远程调用。OperationContract用来标识需要实现的操作(类中方法),代表其能被远程调用。

    数据契约

            DataContractDataMember.DataContract 指类或结构能够被序列化并传输。DataMember 只能用在类或者结构的属性或字段上,指该属性或字段能够被序列化传输。DataContractAttributeDataMemberAttribute标注自定义数据类型,便可传递复杂数据体(需先添加System.Runtime.Serialization.dll引用)

    消息契约

           MessageContract 对控制消息头和消息体元素提供了强力支持,支持MessageHeaderAttributeMessageBodyMemberAttribute属性,可以添加自定义头,控制消息是否被包装(IsWrapped),以及控制签名与加密(ProtectionLevel)。

    错误契约

            用于自定义错误异常的处理方式。默认情况下,当服务器抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息。我们可以自定义异常消息的格式,将我们关心的消息放在错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。

    注意

           重载问题   在重载是面向对象重要思想,体现了多态特性。但是在WCF中,同一个服务协定中,不能存在同名的方法OperationContract,所以在需要重载时,需要给定重载方法一个OperationContract名称,才能实现调用。

            [OperationContract(Name ="HelloString")]//在同一个协定(serviceContract中不能存在同名的方法,但是可以给OperationContract定义名称,以此来区分这是不同的方法
            //默认 请求响应模式
            string Hello(string name);
            [OperationContract(IsOneWay =true, Name = "HelloVoid")] //定义的是OneWay单程模式,如果没有则是默认的请求响应模式,oneway只有响应,没有返回值
            void Hello();

            请求-响应操作  在默认情况下,服务契约中一般都属于请求-响应操作,是一种交互方式。

            单程操作  One-Way操作不需要服务给出响应,即客户端发出消息,并且得到服务端确认后,就理解结束本次操作调用的模式。

            双程操作  当服务端主动发送消息给客户端时,当客户端需要发送批量信息而只需要一个回复时,这时候就需要双程操作。定义回调契约:CallbackContract=typeof(ICallbackService)。需要注意的是,回调契约容易引发死锁的情况。

        //回调契约
        [ServiceContract(CallbackContract = typeof(ICallbackService))]
        public interface ICallbackService
        {
            [OperationContract]
            void Hello();
        }

    绑定

            Binding,是一个制定好的通道栈,包含协议通道,传输通道和编码器。从功能上看,一个绑定继承了通信模式、可靠性、安全性、事务传播和互操作性等设置。下面是WCF提供的12中标准绑定的介绍:




            那么我们该如何选择呢,下面有一个流程图,可供我们参考依据:


             下面简要介绍几种绑定:

    netNamePipeBinding

            属于本机WCF-WCF交互的绑定和地址,IPC实现方式。但是netNamePipeBinding绑定只能使用与本机交互,即服务和客户端都需要部署在同一台主机上才能使用,由于是在同一台主机交互,所以netNamePipeBinding是标准绑定中性能最佳的绑定。

            终节点设置:命令管道协议://主机名:端口/服务地址(可选项)  net.pipe://[Hostname]:[port]/[ServiceAddress]

    总结

    支持单程传输模式

    支持“请求-响应”传输模式

    支持双工传输模式

    性能在标准绑定中最佳

    支持WS(Web Service)事务协议

    支持传输层消息安全

    仅限于WCF系统

    不支持跨主机交互

    netTcpBinding

            跨主机WCF-WCF交互的绑定和地址。在大型SOA系统中,多个服务器部署在局域网内不同的主机上,不再使用限定本机交互的IPC,一般采用TCP协议进行通信。
           TCP协议:端对端协议,远程连接,连接、发送和接收资料以及终止连接,自动调整超时值,提供可靠、双工传输。
          Net.Tcp端口共享:Net.TCP Port sharing service组件,使net.tcp端口可在多个用户进程间共享。net.tcp端口共享服务是用户模式的Windows服务,可代表通过其连接的辅助。
          netTcpBinding绑定:WCF标准协议中,直接使用TCP协议进行消息交互的只有netTcpBinding,且使用二进制编码提高性能,也支持传输安全。可配置closeTimeout、hostNameComparisonMode、listenBacklog、maxBufferPoolSize、MaxConnections、Name、security、openTimeout等属性。

    总结

    支持单程传输模式

    支持“请求-响应”传输模式

    支持双工传输模式

    性能在标准中,仅次于netNamePipeBinding

    支持ws-事务协议

    支持传输层消息安全

    只限于WCF系统

    支持跨主机交互

    支持可靠会话传输

    basicHttpBinding

            基于基础的Web服务的标准绑定。

    支持请求响应传输;

    不支持双工传输;

    性能一般;

    不知处ws事务协议;

    提供基本web服务交互;

    可靠会话传输;

    跨主机交互


    扩展学习

    WebService介绍

            Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
            Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。


    WCF与WebService区别

           WebService严格说来是行业标准,不是技术,使用XML扩展标记语言来表示数据(这个是跨语言和平台的关键)。WCF其实一定程度上就是ASP.Net Web Service,因为它支持Web Service的行业标准和核心协议,因此ASP.NET Web Service能做的事情,它几乎都能胜任。WCF不仅支持和继承Web Service,它还兼容和具备微软早期很多技术的特性。


    SOA系统

            Service Oriented Architecture,面向服务架构,属于组件架构模型。在W3C中,对其定义:一组公开发表接口,并且提供查询的组件。

    特性

    每个服务具有明确边界

    服务是独立的

    采用标准的契约定义和通信协议

    服务是自解释的


    展开全文
  • WCF框架】分布式框架WCF

    千次阅读 热门讨论 2017-12-30 21:37:20
    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践方式。叙述WCF是什么 WCF就是专门
  • WCF理解

    2015-02-15 11:43:47
    关于WCF,也是这次做项目之前看的,然后在做项目的时候用到的,是服务之一层。    这是我的整体架构,我今天只说WCF。... 通讯开发平台,是Windows平台上开发分布式应用最佳实践方式。
  • 初识WCF

    2020-07-02 00:54:19
    Windows Communication ...是Windows平台上开发分布式应用最佳实践方式。 简单的归结为四大部分 1>.网络服务的协议,即用什么网络协议开放客户端接入。 2>.业务服务的协议,即声明服务提供哪些业务。 3>.数
  • WCF简介

    2016-02-29 14:25:06
    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践方式。 简单的归结为四大部分
  • WCF入门教程1——WCF简要介绍

    千次阅读 2015-01-26 23:15:33
    什么是WCF WindowsCommunication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践方式。   WCF体系
  • 1:什么是WCFWCF(Windows Communication Foundation)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。...是Windows平台上开发分布式应用最佳实践方式。WCF是.N...
  • [WCF编程]1.WCF入门示例

    2014-08-19 16:21:49
    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有Http和Ftp的相关技术,是Windows平台上开发...
  • WCF基本介绍

    千次阅读 2015-01-31 21:44:57
    Windows Communication Foundation(WCF)是由微软开发的一组数据通信的应用程序开发接口,可以翻译为Windows 通讯接口。...是Windows平台上开发分布式应用最佳实践方式。  一、先来看看WCF的特点:
  • WCF服务编程

    2011-12-23 10:12:35
    你不仅能够了解到WCF编程技术,以及相关的系统知识,同时还包括了相应的设计方案、诀窍、最佳实践以及存在的缺陷。我之所以站在软件工程的立场阐述本书的每个主题与特征,是因为我期望它能够帮助读者不仅要成为一名...
  • 开发者和架构师们从本书中将不仅学到如何进行WCF编程,还能了解相关的设计指导原则、最佳实践和潜在陷阱。作者在本书中提及的技巧和应用程序均超越那些在传统资源中所找到的内容。 这些内容由50余个原创工具、帮助类...
  • WCF编程(第二版)

    2014-12-27 22:59:51
    ·借鉴ServiceModelEx框架中的相关设计方案、技巧和最佳实践,提高WCF服务开发的效率与质量。 ·深入了解隐藏在设计决策背后的基本原理,对于SOA开发中缺乏文档而又晦涩难懂的功能特性进行了深度分析。 对于WCF编程...

空空如也

空空如也

1 2 3 4 5
收藏数 91
精华内容 36
关键字:

wcf开发最佳实践