a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
263 lines
10 KiB
C#
263 lines
10 KiB
C#
//
|
|
// MsmqElementBase.cs
|
|
//
|
|
// Author:
|
|
// Atsushi Enomoto <atsushi@ximian.com>
|
|
//
|
|
// Copyright (C) 2006,2010 Novell, Inc. http://www.novell.com
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.ComponentModel;
|
|
using System.Configuration;
|
|
using System.Net;
|
|
using System.Net.Security;
|
|
using System.Reflection;
|
|
using System.Security.Cryptography.X509Certificates;
|
|
using System.Security.Principal;
|
|
using System.IdentityModel.Claims;
|
|
using System.IdentityModel.Policy;
|
|
using System.IdentityModel.Tokens;
|
|
using System.ServiceModel;
|
|
using System.ServiceModel.Channels;
|
|
using System.ServiceModel.Description;
|
|
using System.ServiceModel.Diagnostics;
|
|
using System.ServiceModel.Dispatcher;
|
|
using System.ServiceModel.MsmqIntegration;
|
|
using System.ServiceModel.PeerResolvers;
|
|
using System.ServiceModel.Security;
|
|
using System.Runtime.Serialization;
|
|
using System.Text;
|
|
using System.Xml;
|
|
|
|
namespace System.ServiceModel.Configuration
|
|
{
|
|
public abstract class MsmqElementBase
|
|
: TransportElement
|
|
{
|
|
ConfigurationPropertyCollection _properties;
|
|
|
|
protected MsmqElementBase () {
|
|
}
|
|
|
|
|
|
// Properties
|
|
|
|
[ConfigurationProperty ("customDeadLetterQueue",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = null)]
|
|
public Uri CustomDeadLetterQueue {
|
|
get { return (Uri) base ["customDeadLetterQueue"]; }
|
|
set { base ["customDeadLetterQueue"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("deadLetterQueue",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "System")]
|
|
public DeadLetterQueue DeadLetterQueue {
|
|
get { return (DeadLetterQueue) base ["deadLetterQueue"]; }
|
|
set { base ["deadLetterQueue"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("durable",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = true)]
|
|
public bool Durable {
|
|
get { return (bool) base ["durable"]; }
|
|
set { base ["durable"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("exactlyOnce",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = true)]
|
|
public bool ExactlyOnce {
|
|
get { return (bool) base ["exactlyOnce"]; }
|
|
set { base ["exactlyOnce"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("maxRetryCycles",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "2")]
|
|
[IntegerValidator (MinValue = 0,
|
|
MaxValue = int.MaxValue,
|
|
ExcludeRange = false)]
|
|
public int MaxRetryCycles {
|
|
get { return (int) base ["maxRetryCycles"]; }
|
|
set { base ["maxRetryCycles"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("msmqTransportSecurity",
|
|
Options = ConfigurationPropertyOptions.None)]
|
|
public MsmqTransportSecurityElement MsmqTransportSecurity {
|
|
get { return (MsmqTransportSecurityElement) base ["msmqTransportSecurity"]; }
|
|
}
|
|
|
|
protected override ConfigurationPropertyCollection Properties {
|
|
get {
|
|
if (_properties == null) {
|
|
_properties = base.Properties;
|
|
_properties.Add (new ConfigurationProperty ("customDeadLetterQueue", typeof (Uri), null, new UriTypeConverter (), null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("deadLetterQueue", typeof (DeadLetterQueue), "System", null, null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("durable", typeof (bool), "true", new BooleanConverter (), null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("exactlyOnce", typeof (bool), "true", new BooleanConverter (), null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("maxRetryCycles", typeof (int), "2", null, new IntegerValidator (0, int.MaxValue, false), ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("msmqTransportSecurity", typeof (MsmqTransportSecurityElement), null, null, null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("receiveErrorHandling", typeof (ReceiveErrorHandling), "Fault", null, null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("receiveRetryCount", typeof (int), "5", null, new IntegerValidator (0, int.MaxValue, false), ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("retryCycleDelay", typeof (TimeSpan), "00:30:00", null, null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("timeToLive", typeof (TimeSpan), "1.00:00:00", null, null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("useMsmqTracing", typeof (bool), "false", new BooleanConverter (), null, ConfigurationPropertyOptions.None));
|
|
_properties.Add (new ConfigurationProperty ("useSourceJournal", typeof (bool), "false", new BooleanConverter (), null, ConfigurationPropertyOptions.None));
|
|
}
|
|
return _properties;
|
|
}
|
|
}
|
|
|
|
[ConfigurationProperty ("receiveErrorHandling",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "Fault")]
|
|
public ReceiveErrorHandling ReceiveErrorHandling {
|
|
get { return (ReceiveErrorHandling) base ["receiveErrorHandling"]; }
|
|
set { base ["receiveErrorHandling"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("receiveRetryCount",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "5")]
|
|
[IntegerValidator (MinValue = 0,
|
|
MaxValue = int.MaxValue,
|
|
ExcludeRange = false)]
|
|
public int ReceiveRetryCount {
|
|
get { return (int) base ["receiveRetryCount"]; }
|
|
set { base ["receiveRetryCount"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("retryCycleDelay",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "00:30:00")]
|
|
public TimeSpan RetryCycleDelay {
|
|
get { return (TimeSpan) base ["retryCycleDelay"]; }
|
|
set { base ["retryCycleDelay"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("timeToLive",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = "1.00:00:00")]
|
|
public TimeSpan TimeToLive {
|
|
get { return (TimeSpan) base ["timeToLive"]; }
|
|
set { base ["timeToLive"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("useMsmqTracing",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = false)]
|
|
public bool UseMsmqTracing {
|
|
get { return (bool) base ["useMsmqTracing"]; }
|
|
set { base ["useMsmqTracing"] = value; }
|
|
}
|
|
|
|
[ConfigurationProperty ("useSourceJournal",
|
|
Options = ConfigurationPropertyOptions.None,
|
|
DefaultValue = false)]
|
|
public bool UseSourceJournal {
|
|
get { return (bool) base ["useSourceJournal"]; }
|
|
set { base ["useSourceJournal"] = value; }
|
|
}
|
|
|
|
public override void ApplyConfiguration (BindingElement bindingElement)
|
|
{
|
|
var b = (System.ServiceModel.Channels.MsmqBindingElementBase) bindingElement;
|
|
base.ApplyConfiguration (b);
|
|
b.CustomDeadLetterQueue = CustomDeadLetterQueue;
|
|
b.DeadLetterQueue = DeadLetterQueue;
|
|
b.Durable = Durable;
|
|
b.ExactlyOnce = ExactlyOnce;
|
|
b.MaxRetryCycles = MaxRetryCycles;
|
|
b.ReceiveErrorHandling = ReceiveErrorHandling;
|
|
b.ReceiveRetryCount = ReceiveRetryCount;
|
|
b.RetryCycleDelay = RetryCycleDelay;
|
|
b.TimeToLive = TimeToLive;
|
|
b.UseMsmqTracing = UseMsmqTracing;
|
|
b.UseSourceJournal = UseSourceJournal;
|
|
|
|
var bs = b.MsmqTransportSecurity;
|
|
var cs = MsmqTransportSecurity;
|
|
bs.MsmqAuthenticationMode = cs.MsmqAuthenticationMode;
|
|
bs.MsmqEncryptionAlgorithm = cs.MsmqEncryptionAlgorithm;
|
|
bs.MsmqProtectionLevel = cs.MsmqProtectionLevel;
|
|
bs.MsmqSecureHashAlgorithm = cs.MsmqSecureHashAlgorithm;
|
|
}
|
|
|
|
public override void CopyFrom (ServiceModelExtensionElement from)
|
|
{
|
|
var e = (MsmqElementBase) from;
|
|
base.CopyFrom (from);
|
|
CustomDeadLetterQueue = e.CustomDeadLetterQueue;
|
|
DeadLetterQueue = e.DeadLetterQueue;
|
|
Durable = e.Durable;
|
|
ExactlyOnce = e.ExactlyOnce;
|
|
MaxRetryCycles = e.MaxRetryCycles;
|
|
ReceiveErrorHandling = e.ReceiveErrorHandling;
|
|
ReceiveRetryCount = e.ReceiveRetryCount;
|
|
RetryCycleDelay = e.RetryCycleDelay;
|
|
TimeToLive = e.TimeToLive;
|
|
UseMsmqTracing = e.UseMsmqTracing;
|
|
UseSourceJournal = e.UseSourceJournal;
|
|
|
|
var es = e.MsmqTransportSecurity;
|
|
var cs = MsmqTransportSecurity;
|
|
cs.MsmqAuthenticationMode = es.MsmqAuthenticationMode;
|
|
cs.MsmqEncryptionAlgorithm = es.MsmqEncryptionAlgorithm;
|
|
cs.MsmqProtectionLevel = es.MsmqProtectionLevel;
|
|
cs.MsmqSecureHashAlgorithm = es.MsmqSecureHashAlgorithm;
|
|
}
|
|
|
|
protected internal override void InitializeFrom (BindingElement bindingElement)
|
|
{
|
|
var b = (System.ServiceModel.Channels.MsmqBindingElementBase) bindingElement;
|
|
base.InitializeFrom (b);
|
|
CustomDeadLetterQueue = b.CustomDeadLetterQueue;
|
|
DeadLetterQueue = b.DeadLetterQueue;
|
|
Durable = b.Durable;
|
|
ExactlyOnce = b.ExactlyOnce;
|
|
MaxRetryCycles = b.MaxRetryCycles;
|
|
ReceiveErrorHandling = b.ReceiveErrorHandling;
|
|
ReceiveRetryCount = b.ReceiveRetryCount;
|
|
RetryCycleDelay = b.RetryCycleDelay;
|
|
TimeToLive = b.TimeToLive;
|
|
UseMsmqTracing = b.UseMsmqTracing;
|
|
UseSourceJournal = b.UseSourceJournal;
|
|
|
|
var bs = b.MsmqTransportSecurity;
|
|
var cs = MsmqTransportSecurity;
|
|
cs.MsmqAuthenticationMode = bs.MsmqAuthenticationMode;
|
|
cs.MsmqEncryptionAlgorithm = bs.MsmqEncryptionAlgorithm;
|
|
cs.MsmqProtectionLevel = bs.MsmqProtectionLevel;
|
|
cs.MsmqSecureHashAlgorithm = bs.MsmqSecureHashAlgorithm;
|
|
}
|
|
}
|
|
|
|
}
|