zoukankan      html  css  js  c++  java
  • WCF(一)基础整理

    学习WCF之前,了解下WCF和WebService的区别。

    WCF和WebService区别

    1. Web Service严格来说是行业标准,也就是Web Service 规范,它使用XML扩展标记语言来表示数据。
    2. WCF 是一个分布式应用的开发框架,属于特定的技术,或者平台。既不是标准也不是规范。Web Service能做的事它几乎都能胜任(采用 basicHttpBinding绑定的服务就是一个Web 服务),跨平台和语言更不是问题

    WCF具体的几个优点:

    • WCF可以不依赖于IIS。
    • WCF可以配置成BasicHttpBinding来兼容(或者说变身成)Web Service。
    • WCF可以基于TCP或者MessegeQueue来传输数据。
    • WCF的可配置性比WS强,比如安全性。
    • WCF可以是有状态的,并支持事务。
    • WCF 支持多种通信协议 Http/Https 、TCP/UDP、MSMQ、命名管道、对等网、消息可达性、事务流等。
    • WCF 可以与ASP.NET 集成、共享一个上下文(HttpContext)。
    • WCF 支持多种消息传输格式 :text,binary,mtom,Json 等。
    • WCF 安全性要强:支持对称安全、非对称安全、消息安全、传输安全、SSL 流安全、Windows 流安全等。
    • WCF 支持多种会话模式:单向、双向、请求/响应。
    • WCF 支持REST 。
    • WCF 支持多种格式化方式。DataContractSerializer、XmlSerializer、 DataContractJsonSerializer 等。
    • WCF 支持 WAS hosting、Windows 服务 hosting、Self-Hosting、IIS hosting 等。
    • WCF 支持多种并发模式:单例、单调、会话 。

    WCF中的 "A","B","C" 

     "A" (Address)-地址:就是告诉别人我wcf在何处,通过一个URI唯一地址标识,通过这个地址我们可以找到我们要调用的WCF服务。

     "B"(Binding)-绑定: Binding实现在Client和Service通信的所有底层细节。如:我们在客户端与服务端传输的时候采用的是什么样的编码,XML?Text?二进制?...采用哪种传输协议进行传输,TCP?Http?以及采用什么样的机制解决安全问题,SSL?加密?...

     "C"是契约:就是告诉别人我wcf这里有哪些东西, Contract的主要的作用是暴露某个WCF Service所提供的所有有效的方法。

    项目开发中常用到的三种绑定:

    第一:wsHttpBinding, 这个binding可以认为是webservice的加强版WSE,设计的目的就是用于异构系统的交互(比如java)。

    第二:netTcpBinding, 这个binding可以认为是remoting的加强版,设计的目的就是用于不同机器的.net 程序交互,

    第三: netMsmqBinding, 这个binding可以认为是msmq的加强版本,设计目的就是脱机环境下不同机器的.net程序交互,确保信息不丢失。

    代码实际运用

    笔记分享:http://note.youdao.com/share/?id=f245abffbdc09cea7fc8b738e183bec9&type=note#/ 

    原作者博客地址:http://www.cnblogs.com/huangxincheng/archive/2011/10/23/2221845.html

     Endpoint(终结点)

    服务端配置

    <!--Service Web.config-->
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
       <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
    <services> <service name="WCFService.User"> <endpoint address="http://localhost/User.svc" binding="basicHttpBinding" contract="WCFService.IUser" /> </service> </services> </system.serviceModel> </configuration>

    客户端配置

    <!--Client Web.config-->
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
      <system.serviceModel>
        <client>
          <endpoint address="http://localhost/User.svc" binding="basicHttpBinding" contract="WCFService.IUser" bindingConfiguration="myHttpBinding"/>
        </client>
      </system.serviceModel>
    </configuration>

    <!--绑定-->
    <bindings>
      <wsHttpBinding>
        <binding name="myHttpBinding">
          <security mode="None">
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    WCF Demo

    数据契约(DataContract)

    • 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。
    • 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示。
    namespace WcfTest.Model
    {
        [DataContract]
        public class User
        {
            [DataMember(Name = "Name")]
            public string UserName
            {
                get;
                set;
            }
            [DataMember]
            public int Age
            {
                get;
                set;
            }
        }
    }

    服务契约

    [ServiceContract]
     public interface IService1
      {
    
            [OperationContract]
            string GetData(int value);
    
            [OperationContract]
            User GetDataUsingDataContract(User u);
      }

    创建服务,实现接口

    public class Service1 : IService1
        {
            public string GetData(int value)
            {
                return string.Format("You entered: {0}", value);
            }
    
            public User GetDataUsingDataContract(User composite)
            {
                if (composite == null)
                {
                    throw new ArgumentNullException("composite");
                }
                if (composite.BoolValue)
                {
                    composite.StringValue += "Suffix";
                }
                return composite;
            }
        }

     之后可以通过IIS寄宿服务

  • 相关阅读:
    8 Django 模型层(1)
    7 Django的模板层
    Java ClassLoader
    Spring的注入注解
    Java 面试Spring的加载机制
    Spring容器启动初始化bean的方法
    java 线程
    经典博客
    Spring注解@Component、@Repository、@Service、@Controller区别
    java 实现多个文件的Zip包的生成
  • 原文地址:https://www.cnblogs.com/qiuguochao/p/7082854.html
Copyright © 2011-2022 走看看