|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.MsmqIntegration
{
using System;
using System.ComponentModel;
using System.ServiceModel;
using System.Text;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Configuration;
using System.Globalization;
using System.Net;
using System.Net.Security;
using System.Runtime.Serialization;
using System.Security.Principal;
using System.ServiceModel.Channels;
using Config = System.ServiceModel.Configuration;
using System.ServiceModel.Security;
using System.Xml;
public class MsmqIntegrationBinding : MsmqBindingBase
{
// private BindingElements
MsmqIntegrationSecurity security = new MsmqIntegrationSecurity();
public MsmqIntegrationBinding()
{
Initialize();
}
public MsmqIntegrationBinding(string configurationName)
{
Initialize();
ApplyConfiguration(configurationName);
}
public MsmqIntegrationBinding(MsmqIntegrationSecurityMode securityMode)
{
if (!MsmqIntegrationSecurityModeHelper.IsDefined(securityMode))
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("securityMode", (int)securityMode, typeof(MsmqIntegrationSecurityMode)));
Initialize();
this.security.Mode = securityMode;
}
public MsmqIntegrationSecurity Security
{
get { return this.security; }
set { this.security = value; }
}
internal Type[] TargetSerializationTypes
{
get
{
return (transport as MsmqIntegrationBindingElement).TargetSerializationTypes;
}
set
{
(transport as MsmqIntegrationBindingElement).TargetSerializationTypes = value;
}
}
[DefaultValue(MsmqIntegrationDefaults.SerializationFormat)]
public MsmqMessageSerializationFormat SerializationFormat
{
get { return (transport as MsmqIntegrationBindingElement).SerializationFormat; }
set { (transport as MsmqIntegrationBindingElement).SerializationFormat = value; }
}
[EditorBrowsable(EditorBrowsableState.Never)]
public bool ShouldSerializeSecurity()
{
if (this.security.Mode != MsmqIntegrationSecurityMode.Transport)
{
return true;
}
if (this.security.Transport.MsmqAuthenticationMode != MsmqDefaults.MsmqAuthenticationMode ||
this.security.Transport.MsmqEncryptionAlgorithm != MsmqDefaults.MsmqEncryptionAlgorithm ||
this.security.Transport.MsmqSecureHashAlgorithm != MsmqDefaults.MsmqSecureHashAlgorithm ||
this.security.Transport.MsmqProtectionLevel != MsmqDefaults.MsmqProtectionLevel)
{
return true;
}
return false;
}
void Initialize()
{
transport = new MsmqIntegrationBindingElement();
}
void ApplyConfiguration(string configurationName)
{
Config.MsmqIntegrationBindingCollectionElement section = Config.MsmqIntegrationBindingCollectionElement.GetBindingCollectionElement();
Config.MsmqIntegrationBindingElement element = section.Bindings[configurationName];
if (element == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ConfigurationErrorsException(
SR.GetString(SR.ConfigInvalidBindingConfigurationName,
configurationName,
Config.ConfigurationStrings.MsmqIntegrationBindingCollectionElementName)));
}
else
{
element.ApplyConfiguration(this);
}
}
public override BindingElementCollection CreateBindingElements()
{ // return collection of BindingElements
BindingElementCollection bindingElements = new BindingElementCollection();
// order of BindingElements is important
// add transport
this.security.ConfigureTransportSecurity(transport);
bindingElements.Add(transport);
return bindingElements.Clone();
}
}
}
|