zoukankan      html  css  js  c++  java
  • WCF笔记

    注意

    若使用不可序列化的数据类型(如在服务端定义object类型的类成员),可能会导致不响应的问题。


    行为种类

    契约行为、服务行为、操作行为、终结点行为


    服务三要素

    A:服务标识(即逻辑地址)。服务端使用相关的ListenUri(即物理地址)侦听来自客户端的数据,而客户端可通过配置ViaBehavior将数据路由至服务端

    B:服务实现

    C:服务能做的事


    组件

    信道分发器:消息监听与消息接收,并将接收到的消息发给相应的终结点分发器。侦听地址与信道分发器一一对应。服务端专用

    信道侦听器:包含在信道分发器中,用于创建信息、监听消息。服务端专用

    信道工厂:创建信道、发送消息。客户端专用

    信息管理器:在客户端即为信道工厂;在服务端即为信道侦听器

    终结点分发器:与终结点一一对应,使用内置的分发运行时最终完成对消息的处理

    消息筛选器:包含在终结点分发器中,用于判断消息中的逻辑地址是否匹配,以确定是否将此消息交由此终结点进行处理


    协议信道:负责维护消息的非业务逻辑功能,包括:事务、日志、可靠消息、安全性等。一个信道栈可以拥有任意多个协议信道。

    编码信道:负责对消息的编码/解码。常见的编码/解码方式有Text/XML、Binary、MTOM

    传输信道:负责基于某种传输协议的消息传输。一个信道栈只有一个传输信道

    绑定:是一堆信道的有序集合。包括协议信道、编码信道、传输信道。其先后顺序维护在绑定上下文(Binding Context)中


    安全

    服务认证:客户端确认当前用的服务正是自己想调用的

    客户端认证:服务端确认客户端的合法性


    出错

    服务端调用客户端的回调出错(调用时间超过IContextChanne.OperationTime时)时其回调实例不会进入出错状态。

    但客户端若调用服务行为出错一次,其服务实例立即出错,并且无法再复用,只能重建。


    日志

    messageLogging:用于查看服务端与客户端交互的消息

    endToEndTracing:使用此日志快速定位服务端或客户端内部发生异常的服务行为

    日志配置示例

      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel.MessageLogging" switchValue="Warning">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelMessageLoggingListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
          <source name="System.ServiceModel" switchValue="Warning"
              propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.DefaultTraceListener" name="Default">
                <filter type="" />
              </add>
              <add name="ServiceModelTraceListener">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add initializeData="Log/messages.svclog"
              type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
              name="ServiceModelMessageLoggingListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
            <filter type="" />
          </add>
          <add initializeData="Log/tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
              name="ServiceModelTraceListener" traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack">
            <filter type="" />
          </add>
        </sharedListeners>
        <trace autoflush="true" />
      </system.diagnostics>
      <system.serviceModel>
        <diagnostics performanceCounters="All">
          <messageLogging logEntireMessage="false" logKnownPii="true" logMalformedMessages="true"
              logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="false"
              maxMessagesToLog="1024000000" maxSizeOfMessageToLog="1024000"/>
          <endToEndTracing propagateActivity="true" activityTracing="true"
              messageFlowTracing="true" />
        </diagnostics>
      </system.serviceModel>
    


    参考

    Wcf扩展

    WCF Extensibility

    WCF系列(1)—— CustomBehavior 入门

    WCF进阶:扩展EndpointBehavior实现全局参数验证

    通过WCF扩展实现消息压缩

    如何通过扩展WCF来定制和扩展WCF行为

    使用自定义行为扩展 WCF

    扩展性

    使用行为配置和扩展运行时

  • 相关阅读:
    render :template 和 render :parital
    routes.rb和link_to的一些规则
    rails程序文件名命名规范
    Ruby的模型关系随笔
    Ruby的require相关知识
    rails中的form_for
    rails中的session
    RubyMine不能调试Rails项目的问题
    序列化后的json串与解析json串实体间的关系
    mysql还原数据库
  • 原文地址:https://www.cnblogs.com/beta2013/p/3377292.html
Copyright © 2011-2022 走看看