void IPolicyImportExtension.ImportPolicy(MetadataImporter importer, PolicyConversionContext context) { if (importer == null) { throw new ArgumentNullException("importer"); } if (context == null) { throw new ArgumentNullException("context"); } UdpTransportBindingElement udpBindingElement = null; bool multicast = false; PolicyAssertionCollection policyAssertions = context.GetBindingAssertions(); if (policyAssertions.Remove(UdpPolicyStrings.TransportAssertion, UdpPolicyStrings.UdpNamespace) != null) { udpBindingElement = new UdpTransportBindingElement(); } if (policyAssertions.Remove(UdpPolicyStrings.MulticastAssertion, UdpPolicyStrings.UdpNamespace) != null) { multicast = true; } if (udpBindingElement != null) { udpBindingElement.Multicast = multicast; context.BindingElements.Add(udpBindingElement); } }
void Initialize(Uri multicastAddress) { this.viaBehavior = new DiscoveryViaBehavior(multicastAddress); base.ListenUri = multicastAddress; TextMessageEncodingBindingElement textBE = new TextMessageEncodingBindingElement(); textBE.MessageVersion = base.DiscoveryVersion.Implementation.MessageVersion; UdpTransportBindingElement udpBE = DiscoveryDefaults.Udp.CreateUdpTransportBindingElement(); this.udpTransportSettings = new UdpTransportSettings(udpBE); CustomBinding binding = new CustomBinding(); binding.Elements.Add(textBE); binding.Elements.Add(udpBE); base.MaxAnnouncementDelay = DiscoveryDefaults.Udp.AppMaxDelay; base.Address = new EndpointAddress(base.DiscoveryVersion.Implementation.DiscoveryAddress); base.Binding = binding; base.Behaviors.Add(this.viaBehavior); base.Behaviors.Add(new UdpContractFilterBehavior()); }
// private private WsUdpServiceHost() { m_threadManager = new WsThreadManager(5, "Udp"); m_serviceEndpoints = new WsServiceEndpoints(); m_refcount = 0; m_binding = null; m_replyChannel = null; UdpTransportBindingElement transport = new UdpTransportBindingElement(new UdpTransportBindingConfig(WsDiscovery.WsDiscoveryAddress, WsDiscovery.WsDiscoveryPort, m_ignoreLocalRequests)); m_binding = new CustomBinding(transport); }
static Binding CreateBinding(DiscoveryVersion discoveryVersion) { var mbe = new TextMessageEncodingBindingElement() { MessageVersion = discoveryVersion.MessageVersion }; var tbe = new UdpTransportBindingElement(); return(new CustomBinding(mbe, tbe) { SendTimeout = TimeSpan.FromMinutes(1), ReceiveTimeout = TimeSpan.FromMinutes(10) }); }
public override void ApplyConfiguration(BindingElement bindingElement) { base.ApplyConfiguration(bindingElement); UdpTransportBindingElement udpTransportBindingElement = (UdpTransportBindingElement)bindingElement; udpTransportBindingElement.DuplicateMessageHistoryLength = this.DuplicateMessageHistoryLength; udpTransportBindingElement.MaxPendingMessagesTotalSize = this.MaxPendingMessagesTotalSize; udpTransportBindingElement.MaxReceivedMessageSize = this.MaxReceivedMessageSize; udpTransportBindingElement.MulticastInterfaceId = this.MulticastInterfaceId; this.RetransmissionSettings.ApplyConfiguration(udpTransportBindingElement.RetransmissionSettings); udpTransportBindingElement.SocketReceiveBufferSize = this.SocketReceiveBufferSize; udpTransportBindingElement.TimeToLive = this.TimeToLive; }
bool BindingElementsPropertiesMatch(UdpTransportBindingElement transport, MessageEncodingBindingElement encoding) { if (!this.udpTransport.IsMatch(transport)) { return(false); } if (!this.textEncoding.IsMatch(encoding)) { return(false); } return(true); }
public void ImportPolicy(MetadataImporter importer, PolicyConversionContext context) { XmlQualifiedName wsdlBindingQName; string transportUri = WsdlImporter.SoapInPolicyWorkaroundHelper.FindAdHocPolicy(context, this.udpTransportUriKey, out wsdlBindingQName); if (transportUri != null && transportUri.Equals(UdpConstants.WsdlSoapUdpTransportUri, StringComparison.Ordinal) && !context.BindingElements.Contains(typeof(TransportBindingElement))) { UdpTransportBindingElement transport = new UdpTransportBindingElement(); ((ITransportPolicyImport)transport).ImportPolicy(importer, context); StateHelper.RegisterTransportBindingElement(importer, wsdlBindingQName); context.BindingElements.Add(transport); } }
protected internal override void InitializeFrom(BindingElement bindingElement) { base.InitializeFrom(bindingElement); UdpTransportBindingElement udpTransportBindingElement = (UdpTransportBindingElement)bindingElement; this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.DuplicateMessageHistoryLength, udpTransportBindingElement.DuplicateMessageHistoryLength); this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.MaxPendingMessagesTotalSize, udpTransportBindingElement.MaxPendingMessagesTotalSize); this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.MaxReceivedMessageSize, udpTransportBindingElement.MaxReceivedMessageSize); this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.MulticastInterfaceId, udpTransportBindingElement.MulticastInterfaceId); this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.SocketReceiveBufferSize, udpTransportBindingElement.SocketReceiveBufferSize); this.SetPropertyValueIfNotDefaultValue(UdpTransportConfigurationStrings.TimeToLive, udpTransportBindingElement.TimeToLive); this.RetransmissionSettings.InitializeFrom(udpTransportBindingElement.RetransmissionSettings); }
private UdpBinding(UdpTransportBindingElement transport, TextMessageEncodingBindingElement encoding) : this() { this.DuplicateMessageHistoryLength = transport.DuplicateMessageHistoryLength; this.MaxBufferPoolSize = transport.MaxBufferPoolSize; this.MaxPendingMessagesTotalSize = transport.MaxPendingMessagesTotalSize; this.MaxReceivedMessageSize = transport.MaxReceivedMessageSize; this.MaxRetransmitCount = Math.Max(transport.RetransmissionSettings.MaxUnicastRetransmitCount, transport.RetransmissionSettings.MaxMulticastRetransmitCount); this.MulticastInterfaceId = transport.MulticastInterfaceId; this.TimeToLive = transport.TimeToLive; this.ReaderQuotas = encoding.ReaderQuotas; this.TextEncoding = encoding.WriteEncoding; }
void IPolicyImportExtension.ImportPolicy(MetadataImporter importer, PolicyConversionContext context) { if (importer == null) { throw new ArgumentNullException("importer"); } if (context == null) { throw new ArgumentNullException("context"); } ICollection<XmlElement> bindingAssertions = context.GetBindingAssertions(); List<XmlElement> processedAssertions = new List<XmlElement>(); UdpTransportBindingElement udpBindingElement = null; bool multicast = false; foreach (XmlElement assertion in bindingAssertions) { if (assertion.NamespaceURI != UdpPolicyStrings.UdpNamespace) { continue; } switch (assertion.LocalName) { case UdpPolicyStrings.TransportAssertion: udpBindingElement = new UdpTransportBindingElement(); break; case UdpPolicyStrings.MulticastAssertion: multicast = true; break; default: continue; } processedAssertions.Add(assertion); } if (udpBindingElement != null) { udpBindingElement.Multicast = multicast; context.BindingElements.Add(udpBindingElement); } for (int i = 0; i < processedAssertions.Count; i++) { bindingAssertions.Remove(processedAssertions[i]); } }
internal static void ExportRetransmissionEnabledAssertion(UdpTransportBindingElement bindingElement, PolicyAssertionCollection assertions) { if (bindingElement == null) { throw FxTrace.Exception.ArgumentNull("bindingElement"); } if (assertions == null) { throw FxTrace.Exception.ArgumentNull("assertions"); } if (bindingElement.RetransmissionSettings.Enabled) { XmlElement assertion = Document.CreateElement(UdpConstants.WsdlSoapUdpTransportPrefix, UdpConstants.RetransmissionEnabled, UdpConstants.WsdlSoapUdpTransportNamespace); assertions.Add(assertion); } }
public static UdpTransportBindingElement CreateUdpTransportBindingElement() { UdpTransportBindingElement udpBE = new UdpTransportBindingElement(); udpBE.RetransmissionSettings.MaxUnicastRetransmitCount = MaxUnicastRetransmitCount; udpBE.RetransmissionSettings.MaxMulticastRetransmitCount = MaxMulticastRetransmitCount; udpBE.RetransmissionSettings.DelayLowerBound = TimeSpan.FromMilliseconds(50); udpBE.RetransmissionSettings.DelayUpperBound = TimeSpan.FromMilliseconds(250); udpBE.RetransmissionSettings.MaxDelayPerRetransmission = TimeSpan.FromMilliseconds(500); udpBE.DuplicateMessageHistoryLength = DuplicateMessageHistoryLength; // The default value of ManualAddressing on UDP transport is false. // In discovery case, the discovery endpoints will receive all kinds of discovery messages, which sometimes // don't match the service contract. In this case, we want the discovery endpoint to ---- the errors // instead of sending fault messages back. So we need to disable auto addressing for the discovery scenario. udpBE.ManualAddressing = true; return udpBE; }
internal static bool TryCreate(BindingElementCollection bindingElements, out Binding binding) { binding = null; if (bindingElements.Count > 2) { return(false); } UdpTransportBindingElement transport = null; TextMessageEncodingBindingElement encoding = null; foreach (BindingElement bindingElement in bindingElements) { if (bindingElement is UdpTransportBindingElement) { transport = bindingElement as UdpTransportBindingElement; } else if (bindingElement is TextMessageEncodingBindingElement) { encoding = bindingElement as TextMessageEncodingBindingElement; } else { return(false); } } if (transport == null || encoding == null) { return(false); } UdpBinding udpBinding = new UdpBinding(transport, encoding); if (!udpBinding.BindingElementsPropertiesMatch(transport, encoding)) { return(false); } binding = udpBinding; return(true); }
public static UdpTransportBindingElement CreateUdpTransportBindingElement() { UdpTransportBindingElement udpBE = new UdpTransportBindingElement(); udpBE.RetransmissionSettings.MaxUnicastRetransmitCount = MaxUnicastRetransmitCount; udpBE.RetransmissionSettings.MaxMulticastRetransmitCount = MaxMulticastRetransmitCount; udpBE.RetransmissionSettings.DelayLowerBound = TimeSpan.FromMilliseconds(50); udpBE.RetransmissionSettings.DelayUpperBound = TimeSpan.FromMilliseconds(250); udpBE.RetransmissionSettings.MaxDelayPerRetransmission = TimeSpan.FromMilliseconds(500); udpBE.DuplicateMessageHistoryLength = DuplicateMessageHistoryLength; // The default value of ManualAddressing on UDP transport is false. // In discovery case, the discovery endpoints will receive all kinds of discovery messages, which sometimes // don't match the service contract. In this case, we want the discovery endpoint to ---- the errors // instead of sending fault messages back. So we need to disable auto addressing for the discovery scenario. udpBE.ManualAddressing = true; return(udpBE); }
public UdpBinding() : base() { this.textEncoding = new TextMessageEncodingBindingElement(); this.udpTransport = new UdpTransportBindingElement(); }
bool IsBindingElementsMatch(UdpTransportBindingElement udpTransportBindingElement, TextMessageEncodingBindingElement textMessageEncodingBindingElement, ReliableSessionBindingElement reliableSessionBindingElement, CompositeDuplexBindingElement compositeDuplexBindingElement) { if (!IsTransportMatch(this.transport, udpTransportBindingElement)) { return false; } if(!IsEncodingMatch(this.encoding, textMessageEncodingBindingElement)) { return false; } if (this.ReliableSessionEnabled) { if (!IsSessionMatch(this.session, reliableSessionBindingElement)) { return false; } if (compositeDuplexBindingElement != null) { if (!IsCompositeDuplexMatch(this.compositeDuplex, compositeDuplexBindingElement)) { return false; } } else { return false; } } else if (reliableSessionBindingElement != null) { return false; } return true; }
static Binding CreateBinding (DiscoveryVersion discoveryVersion) { var mbe = new TextMessageEncodingBindingElement () {MessageVersion = discoveryVersion.MessageVersion}; var tbe = new UdpTransportBindingElement (); return new CustomBinding (mbe, tbe) {SendTimeout = TimeSpan.FromMinutes (1), ReceiveTimeout = TimeSpan.FromMinutes (10)}; }
void Initialize() { transport = new UdpTransportBindingElement(); session = new ReliableSessionBindingElement(); compositeDuplex = new CompositeDuplexBindingElement(); encoding = new TextMessageEncodingBindingElement(); }
//initialize a SampleProfileUdpBinding from the info collected in a ReliableSessionBindingElement if one is present. void InitializeFrom(UdpTransportBindingElement udpTransportBindingElement, TextMessageEncodingBindingElement textMessageEncodingBindingElement, ReliableSessionBindingElement reliableSessionBindingElement, CompositeDuplexBindingElement compositeDuplexBindingElement) { this.transport.Multicast = udpTransportBindingElement.Multicast; this.transport.MaxBufferPoolSize = udpTransportBindingElement.MaxBufferPoolSize; this.transport.MaxReceivedMessageSize = udpTransportBindingElement.MaxReceivedMessageSize; ((TextMessageEncodingBindingElement)this.encoding).WriteEncoding = textMessageEncodingBindingElement.WriteEncoding; textMessageEncodingBindingElement.ReaderQuotas.CopyTo(((TextMessageEncodingBindingElement)this.encoding).ReaderQuotas); this.ReliableSessionEnabled = reliableSessionBindingElement != null; if (reliableSessionBindingElement != null) { this.SessionInactivityTimeout = reliableSessionBindingElement.InactivityTimeout; this.OrderedSession = reliableSessionBindingElement.Ordered; } if (compositeDuplexBindingElement != null) { this.ClientBaseAddress = compositeDuplexBindingElement.ClientBaseAddress; } }
internal UdpTransportSettings(UdpTransportBindingElement udpTransportBindingElement) { this.maxPendingMessageCount = UdpConstants.Defaults.MaxPendingMessageCount; this.UdpTransportBindingElement = udpTransportBindingElement; }
bool BindingElementsPropertiesMatch(UdpTransportBindingElement transport, MessageEncodingBindingElement encoding) { if (!this.udpTransport.IsMatch(transport)) { return false; } if (!this.textEncoding.IsMatch(encoding)) { return false; } return true; }
protected override BindingElement CreateBindingElement() { UdpTransportBindingElement bindingElement = new UdpTransportBindingElement(); this.ApplyConfiguration(bindingElement); return bindingElement; }