DotNet关键知识点——WCF篇(四)

WCF的配置

1. 客户端声明式配置

端点定义在标签对内,也以ABC为要素,可含name用以命名。Contract根据指向导出的代理(接口)。

端点头信息

在中定义标签对,可含请求的优先级信息标签。

定义端点的元数据

metadata,含policyImporters和wsdlImporters。

端点属性设置

类似服务器侧,在endpoint标签中指定属性bindingConfiguration="配置式名称",在标签对中加入对应的具体的binding标签(如basicHttpBinding,wsHttpBinding等),在该标签中加入binding标签,其名称属性name即上述配置式名称。

端点行为设置

端点行为配置本质上是对端点属性的一种集合式设置以达到某个功能。类似服务器侧,在endpoint标签中指定属性behaviorConfiguration="配置式名称",在标签对中加入标签对,在其中加入标签对,其名称属性name即上述配置式名称,在该组标签对中包含一系列的行为配置元素:

元素说明子元素和属性
clientCredentials鉴权保密信息子元素:
clientCertificate:客户证书
httpDigest:摘要访问(Digest Access)验证类型
issuedToken:送到service进行验证的令牌属性
peer:在P2P模式下的验证
serviceCertificate:从service得到证书并送到service以进行验证
windows:含属性 allowedImpersonation, allowNtlm
callbackDebug控制回调异常的传导
类似服务端的serviceDebug
仅有属性includExceptionDetailsInFaults设为True表示回调(如双工)所有异常均传回到服务,存在安全隐患
callbackTimeouts设置回调超时仅有属性TimeSpan transactionTimeout属性用以设置
clientVia调试中继站属性viaUri设置到中继站的URI
dataContractSerializer控制创建请求和解析响应的序列化过程属性MaxItemsInObjectGraph规定序列化过程中序列化树中最大元素个数;IgnoreExtensionDataObject在DataContract数据类型也实现IExtensibleDataObject时,支持序列化的前向兼容。
synchronousReceive为受到的每个请求消息设置独立的处理线程 
transactedBatching设置一个事务中回传的回调仅有属性maxBatchSize设置最大的回调个数

 

2. 客户端命令式配置

AddressHeader header = AddressHeader.CreateAddressHeader("header名", "名空间", object 值);
EndpointAddress endpoint = new EndpointAddress(客户端只能是绝对地址, header);

SomeBinding binding =  new SomeBinding("binding配置式名称");
// 或使用安全模式设置:
SomeBinding binding = new SomeBinding(SecuritMode.xxx);

SomeProxy proxy = new SomeProxy(binding, endpoint);  // 参数设置binding和address,proxy内含contract
// 或使用name命名的声明配置的endpoint:
SomeProxy proxy = new SomeProxy("endpoint的配置式名称");

3. 服务端命令式配置

在第二篇中已经介绍部分基本的服务器命令式配置。这里补充:

多端点

binding和端点地址是1对1关系,即同一个地址,不为之再创建一个binding,即使配置完全相同。

监听URI共享

使用AddServiceEndpoint(C,B,A, Uri commonUri)版本,第四个参数设置监听URI,即客户端设置的viaUri,

这样,在客户端proxy常规创建完后添加以下端点行为以建立到中继的转接:
proxy.Endpoint.Behaviors.Add(new ViaUriBehavior(commonUri));

Binding的创建

在第二篇中已提及,Binding的本质是一系列的BindingElement,以下对常用BindingElement做一总结:

元素(XXXBindingElement)说明属性
TextMessageEncoding编码基于文本的SOAP消息MaxReadPoolSize:处理请求的读取器(reader)的个数
MaxWritePoolSize:处理输出请求的读取器个数
MessageVersion:SOAP和WS-Addressing版本
ReaderQuotas: 消息中字符串内容限制
WriteEncoding:编码格式
HttpTransportHTTP协议传输支持AllowCookies:客户端是否使用Cookie
AuthenticationScheme:服务访问认证方式
BypassProxyOnLocal:局域服务不用代理
HostNameComparisonMode:依优先级为强主机忽略、全等和弱主机忽略的URI匹配
KeepAliveEnabled:不间断连接
ProxyAddress:代理地址
ProxyAuthenticationScheme:代理认证方式
Realm:鉴权分区(RFC2617)
TransferMode:缓冲|流式(一或两端)模式
UnsafeConnectionNtlmAuthentication:
UseDefaultWebProxy:是否用系统代理
HttpsTransport从HttpTransportBindingElement继承,在启用安全时替代之继承HttpTransport外:
RequireClientCertificate:SSL客户端认证
Scheme:设为https
BinaryMessageEncoding将消息转换为二进制格式 
TransactionFlow事务流机制仅有TransactionProtocol,表示如何从C到S传送事务,默认OleTransaction,也可支持WS-Atomic
TcpTransport ChannelInitializationTimeout:初始化超时
ConnectionBufferSize:传出消息缓冲长度
ConnectionPoolSettings:连接池设置
ListenBacklog:(socket层)最大监听个数
PortSharingEnabled:端口(进程间)共享
TeredoEnabled:一种翻越防火墙的技术
TransferMode:同前
NamedPipeTransport命名管道的传输机制ChannelInitializationTimeout: 同上
ConnectionBufferSize: 同上
ConnectionPoolSettings: 同上
TransferMode:同上
MsmqTransport
MSMQ传输机制CustomDeadLetterQueue:队列的URI
DeadLetterQueue:包括不用,系统和自定义
Durable:队列管理器失败时消息是否会丢失
ExactlyOnce:只传一次,必须为Durable
MaxRetryCycles:最大尝试次数
MsmqTransportSecurity:传输层安全性
QueueTransferProtocol:包括本地MSMQ协议,SOAP可靠消息协议(SRMP),SRMP安全协议,当开启AD DS,只能使用本地协议
ReceiveErrorHandling: 如何处置问题消息,包括丢弃,回传错误到客户,通过否定ACK拒绝消息,或将消息放入有毒消息队列
ReceiveRetryCount:入重试队列前尝试次数
RetryCycleDelay:一次重试尝试的时间
TimeToLive:消息超时后置入dead-letter队列
TransactedReceiveEnabled:是否消息接受作为事务一部分
UseActiveDirectory:是否队列地址转换为活动目录的域服务(AD DS)
UseMsmqTracing:是否用MSMQ内建跟踪器
UseSourceJournal:是否在源日志中保留消息副本
PnrpPeerResolverPeer Name Resolution Protocol实现,用于P2P链接仅有ReferralPolicy,用于设置Referral是否与其他resolver共享
PeerTransportP2P传输机制ListenIPAddress:监听的IP地址
Port: 监听的端口
Security: 安全性设置
CompositeDuplex基于HTTP的双工通信,支持回调仅有ClientBaseAddress,回调消息的目的地址
ReliableSession消息有序化AcknowledgementInterval:服务端ACK消息编组发回的时间间隔
EnableFlowControl:是否开启服务端流量控制
InactivityTimeout:无消息时服务保持的时长
MaxPendingChannels:最大的等待通道数
MaxRetryCount:最大重试次数
MaxTransferWindowSize:在收发缓冲中最大消息个数
Ordered:是否保证有序化


上述BindingElement的继承关系(~表示BindingElement)

~ – Transport~ – HttpTransport~ - HttpsTransport~
               –ConnectionOrientedTransport~ – TcpTransport~ 
                                             - NamedPipeTransport~
               - Msmq~Base - MsmqTransport~
               - PeerResolver~ - PnrpPeerResolver~
               - PeerTransport~
  - MessageEncoding~ – TextMessageEncoding~
                     – BinaryMessageEncoding~
  - TransactionFlow~
  - CompositeDuplexBindingElement~
  - ReliableSession~


主要的Binding类型

Binding类型说明使用的BindingElement
basicHttpBinding TextMessageEncoding;
Http(s)Transport
netTcpBinding BinaryMessageEncoding;
TransactionFlow;
TcpTransport
netNamedPipeBinding BinaryMessageEncoding;
TransactionFlow;
NamedPipeTransport
netMsmqBinding不支持事务流BinaryMessageEncoding;
MsmqTransport
netPeerTcpBinding BinaryMessageEncoding;
PnrpPeerResolver;
PeerTransport
wsDualHttpBinding TextMessageEncoding;
TransactionFlow;
HttpTransport
CompositeDuplex;
ReliableSession


其他常用Binding类型

Binding类型说明使用的BindingElement
basicHttpContextBindingallowCookies=TrueTextMessageEncoding;
HttpTransport
msmqIntegrationBinding BinaryMessageEncoding;
MsmqTransport
netTcpContextBinding BinaryMessageEncoding;
TransactionFlow;
TcpTransport
webHttpBinding与basicHttpBinding主要区别是消息格式TextMessageEncoding;
HttpTransport
wsFederationHttpbinding TextMessageEncoding;
TransactionFlow;
HttpTransport
wsHttpContextBinding 同上
ws2007FederationHttpBinding 同上
ws2007HttpBinding 同上

 

4. WCF流水线

客户端应用程序 –> 服务代理(Proxy) –> 通道 –> 通道 … –> 传输通道 –> … 通道 –> 通道 –> 分发器 –> 服务端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值