static void ValidateReliability(ServiceEndpoint endpoint) { if (endpoint.Binding is NetNamedPipeBinding)//Inherently reliable { return; } if (endpoint.Binding is WSDualHttpBinding)//Always reliable { return; } if (endpoint.Binding is NetTcpBinding) { NetTcpBinding tcpBinding = endpoint.Binding as NetTcpBinding; if (tcpBinding.ReliableSession.Enabled) { return; } } if (endpoint.Binding is WSHttpBindingBase) { WSHttpBindingBase wsBinding = endpoint.Binding as WSHttpBindingBase; if (wsBinding.ReliableSession.Enabled) { return; } } throw new InvalidOperationException("BindingRequirementAttribute requires reliability enabled, but binding for the endpoint with contract " + endpoint.Contract.ContractType + " has does not support reliability or has it disabled"); }
void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext) { if (endpointContext == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext"); } #pragma warning suppress 56506 // [....], endpointContext.Endpoint is never null if (endpointContext.Endpoint.Binding == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext.Binding"); } if (endpointContext.Endpoint.Binding is CustomBinding) { BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements; Binding binding; TransportBindingElement transport = elements.Find <TransportBindingElement>(); if (transport is HttpTransportBindingElement) { if (WSHttpBindingBase.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } else if (WSDualHttpBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } else if (BasicHttpBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } else if (NetHttpBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } } else if (transport is MsmqTransportBindingElement && NetMsmqBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } else if (transport is NamedPipeTransportBindingElement && NetNamedPipeBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } #pragma warning disable 0618 else if (transport is PeerTransportBindingElement && NetPeerTcpBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } #pragma warning restore 0618 else if (transport is TcpTransportBindingElement && NetTcpBinding.TryCreate(elements, out binding)) { SetBinding(endpointContext.Endpoint, binding); } } }
static void ValidateTransactionFlow(ServiceEndpoint endpoint) { Exception exception = new InvalidOperationException("BindingRequirementAttribute requires transaction flow enabled, but binding for the endpoint with contract " + endpoint.Contract.ContractType + " has it disabled"); foreach (OperationDescription operation in endpoint.Contract.Operations) { foreach (IOperationBehavior behavior in operation.Behaviors) { if (behavior is TransactionFlowAttribute) { TransactionFlowAttribute attribute = behavior as TransactionFlowAttribute; if (attribute.Transactions == TransactionFlowOption.Allowed) { if (endpoint.Binding is NetTcpBinding) { NetTcpBinding tcpBinding = endpoint.Binding as NetTcpBinding; if (tcpBinding.TransactionFlow == false) { throw exception; } break; } if (endpoint.Binding is NetNamedPipeBinding) { NetNamedPipeBinding ipcBinding = endpoint.Binding as NetNamedPipeBinding; if (ipcBinding.TransactionFlow == false) { throw exception; } break; } if (endpoint.Binding is WSHttpBindingBase) { WSHttpBindingBase wsBinding = endpoint.Binding as WSHttpBindingBase; if (wsBinding.TransactionFlow == false) { throw exception; } break; } if (endpoint.Binding is WSDualHttpBinding) { WSDualHttpBinding wsDualBinding = endpoint.Binding as WSDualHttpBinding; if (wsDualBinding.TransactionFlow == false) { throw exception; } break; } throw new InvalidOperationException("BindingRequirementAttribute requires transaction flow enabled, but binding for the endpoint with contract " + endpoint.Contract.ContractType + " does not support transaction flow"); } } } } }
void IWsdlImportExtension.ImportEndpoint(WsdlImporter importer, WsdlEndpointConversionContext endpointContext) { if (endpointContext == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext"); } if (endpointContext.Endpoint.Binding == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("endpointContext.Binding"); } if (endpointContext.Endpoint.Binding is CustomBinding) { System.ServiceModel.Channels.Binding binding; BindingElementCollection elements = ((CustomBinding)endpointContext.Endpoint.Binding).Elements; TransportBindingElement element = elements.Find <TransportBindingElement>(); if (element is HttpTransportBindingElement) { if (WSHttpBindingBase.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } else if (WSDualHttpBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } else if (BasicHttpBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } } else if ((element is MsmqTransportBindingElement) && NetMsmqBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } else if ((element is NamedPipeTransportBindingElement) && NetNamedPipeBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } else if ((element is PeerTransportBindingElement) && NetPeerTcpBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } else if ((element is TcpTransportBindingElement) && NetTcpBinding.TryCreate(elements, out binding)) { this.SetBinding(endpointContext.Endpoint, binding); } } }
protected internal override void InitializeFrom(Binding binding) { base.InitializeFrom(binding); WSHttpBindingBase wspBinding = (WSHttpBindingBase)binding; SetPropertyValueIfNotDefaultValue(ConfigurationStrings.BypassProxyOnLocal, wspBinding.BypassProxyOnLocal); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TransactionFlow, wspBinding.TransactionFlow); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.HostNameComparisonMode, wspBinding.HostNameComparisonMode); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxBufferPoolSize, wspBinding.MaxBufferPoolSize); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MaxReceivedMessageSize, wspBinding.MaxReceivedMessageSize); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.MessageEncoding, wspBinding.MessageEncoding); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.ProxyAddress, wspBinding.ProxyAddress); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.TextEncoding, wspBinding.TextEncoding); SetPropertyValueIfNotDefaultValue(ConfigurationStrings.UseDefaultWebProxy, wspBinding.UseDefaultWebProxy); this.ReaderQuotas.InitializeFrom(wspBinding.ReaderQuotas); this.ReliableSession.InitializeFrom(wspBinding.ReliableSession); }
protected override void OnApplyConfiguration(Binding binding) { WSHttpBindingBase base2 = (WSHttpBindingBase)binding; base2.BypassProxyOnLocal = this.BypassProxyOnLocal; base2.TransactionFlow = this.TransactionFlow; base2.HostNameComparisonMode = this.HostNameComparisonMode; base2.MaxBufferPoolSize = this.MaxBufferPoolSize; base2.MaxReceivedMessageSize = this.MaxReceivedMessageSize; base2.MessageEncoding = this.MessageEncoding; if (this.ProxyAddress != null) { base2.ProxyAddress = this.ProxyAddress; } base2.TextEncoding = this.TextEncoding; base2.UseDefaultWebProxy = this.UseDefaultWebProxy; this.ReaderQuotas.ApplyConfiguration(base2.ReaderQuotas); this.ReliableSession.ApplyConfiguration(base2.ReliableSession); }
protected internal override void InitializeFrom(Binding binding) { base.InitializeFrom(binding); WSHttpBindingBase base2 = (WSHttpBindingBase)binding; this.BypassProxyOnLocal = base2.BypassProxyOnLocal; this.TransactionFlow = base2.TransactionFlow; this.HostNameComparisonMode = base2.HostNameComparisonMode; this.MaxBufferPoolSize = base2.MaxBufferPoolSize; this.MaxReceivedMessageSize = base2.MaxReceivedMessageSize; this.MessageEncoding = base2.MessageEncoding; if (base2.ProxyAddress != null) { this.ProxyAddress = base2.ProxyAddress; } this.TextEncoding = base2.TextEncoding; this.UseDefaultWebProxy = base2.UseDefaultWebProxy; this.ReaderQuotas.InitializeFrom(base2.ReaderQuotas); this.ReliableSession.InitializeFrom(base2.ReliableSession); }