125 lines
4.5 KiB
C#
125 lines
4.5 KiB
C#
|
//------------------------------------------------------------
|
||
|
// 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();
|
||
|
}
|
||
|
}
|
||
|
}
|