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);
            }
        }
コード例 #2
0
        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());
        }
コード例 #3
0
ファイル: WsUdpServer.cs プロジェクト: leeholder/Netduino_SDK
        // 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);
        }
コード例 #4
0
        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)
            });
        }
コード例 #5
0
        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;
        }
コード例 #6
0
        bool BindingElementsPropertiesMatch(UdpTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            if (!this.udpTransport.IsMatch(transport))
            {
                return(false);
            }

            if (!this.textEncoding.IsMatch(encoding))
            {
                return(false);
            }

            return(true);
        }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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;
        }
コード例 #10
0
 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;
 }
コード例 #11
0
        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]);
            }
        }
コード例 #12
0
        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);
            }
        }
コード例 #13
0
            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;
            }
コード例 #14
0
        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);
        }
コード例 #15
0
            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);
            }
コード例 #16
0
 public UdpBinding()
     : base()
 {
     this.textEncoding = new TextMessageEncodingBindingElement();
     this.udpTransport = new UdpTransportBindingElement();
 }
コード例 #17
0
        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;
        }
コード例 #18
0
ファイル: UdpDiscoveryEndpoint.cs プロジェクト: nickchal/pash
		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)};
		}
コード例 #19
0
 void Initialize()
 {
     transport = new UdpTransportBindingElement();
     session = new ReliableSessionBindingElement();
     compositeDuplex = new CompositeDuplexBindingElement();
     encoding = new TextMessageEncodingBindingElement();
 }
コード例 #20
0
        //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;
            }
        }
コード例 #21
0
 internal UdpTransportSettings(UdpTransportBindingElement udpTransportBindingElement)
 {
     this.maxPendingMessageCount     = UdpConstants.Defaults.MaxPendingMessageCount;
     this.UdpTransportBindingElement = udpTransportBindingElement;
 }
コード例 #22
0
        bool BindingElementsPropertiesMatch(UdpTransportBindingElement transport, MessageEncodingBindingElement encoding)
        {
            if (!this.udpTransport.IsMatch(transport))
            {
                return false;
            }

            if (!this.textEncoding.IsMatch(encoding))
            {
                return false;
            }

            return true;
        }
コード例 #23
0
 internal UdpTransportSettings(UdpTransportBindingElement udpTransportBindingElement)
 {
     this.maxPendingMessageCount = UdpConstants.Defaults.MaxPendingMessageCount;
     this.UdpTransportBindingElement = udpTransportBindingElement;
 }
コード例 #24
0
 public UdpBinding()
     : base()
 {
     this.textEncoding = new TextMessageEncodingBindingElement();
     this.udpTransport = new UdpTransportBindingElement();
 }
コード例 #25
0
 protected override BindingElement CreateBindingElement()
 {
     UdpTransportBindingElement bindingElement = new UdpTransportBindingElement();
     this.ApplyConfiguration(bindingElement);
     return bindingElement;
 }