Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / InfocardInteractiveChannelInitializer.cs / 1 / InfocardInteractiveChannelInitializer.cs
//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
namespace System.ServiceModel.Security
{
using System.Collections.Generic;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Description;
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Runtime.Serialization;
using System.ServiceModel.Security;
public class InfocardInteractiveChannelInitializer : IInteractiveChannelInitializer
{
ClientCredentials credentials;
Binding binding;
public InfocardInteractiveChannelInitializer( ClientCredentials credentials, Binding binding )
{
this.credentials = credentials;
this.binding = binding;
}
public Binding Binding
{
get
{
return binding;
}
}
public virtual IAsyncResult BeginDisplayInitializationUI(IClientChannel channel, AsyncCallback callback, object state)
{
return new GetTokenUIAsyncResult(binding, channel, this.credentials, callback, state);
}
public virtual void EndDisplayInitializationUI(IAsyncResult result)
{
GetTokenUIAsyncResult.End(result);
}
}
internal class GetTokenUIAsyncResult :AsyncResult
{
IClientChannel proxy;
ClientCredentials credentials;
Uri relyingPartyIssuer;
bool requiresInfoCard;
Binding binding;
static AsyncCallback callback = DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(GetTokenUIAsyncResult.Callback));
internal GetTokenUIAsyncResult(Binding binding,
IClientChannel channel,
ClientCredentials credentials,
AsyncCallback callback,
object state)
: base(callback, state)
{
this.credentials = credentials;
this.proxy = channel;
this.binding = binding;
this.CallBegin(true);
}
void CallBegin(bool completedSynchronously)
{
IAsyncResult result = null;
Exception exception = null;
try
{
CardSpacePolicyElement[ ] chain;
SecurityTokenManager tokenManager = credentials.CreateSecurityTokenManager();
requiresInfoCard = InfoCardHelper.IsInfocardRequired(binding, credentials, tokenManager, proxy.RemoteAddress, out chain, out relyingPartyIssuer);
MessageSecurityVersion bindingSecurityVersion = InfoCardHelper.GetBindingSecurityVersionOrDefault(binding);
WSSecurityTokenSerializer tokenSerializer = WSSecurityTokenSerializer.DefaultInstance;
result = credentials.GetInfoCardTokenCallback.BeginInvoke(requiresInfoCard, chain, tokenManager.CreateSecurityTokenSerializer(bindingSecurityVersion.SecurityTokenVersion), callback, this);
}
catch (Exception e)
{
if (DiagnosticUtility.IsFatal(e))
{
throw;
}
exception = e;
}
if (exception == null)
{
if (!result.CompletedSynchronously)
{
return;
}
this.CallEnd(result, out exception);
}
if (exception != null)
{
return;
}
this.CallComplete(completedSynchronously, null);
}
static void Callback(IAsyncResult result)
{
if (result.CompletedSynchronously)
{
return;
}
GetTokenUIAsyncResult outer = (GetTokenUIAsyncResult)result.AsyncState;
Exception exception = null;
outer.CallEnd(result, out exception);
outer.CallComplete(false, exception);
}
void CallEnd(IAsyncResult result, out Exception exception)
{
try
{
SecurityToken token = credentials.GetInfoCardTokenCallback.EndInvoke(result);
ChannelParameterCollection channelParameters =
proxy.GetProperty();
if( null != channelParameters )
{
channelParameters.Add( new InfoCardChannelParameter( token, relyingPartyIssuer, requiresInfoCard ) );
}
exception = null;
}
catch (Exception e)
{
if (DiagnosticUtility.IsFatal(e))
{
throw;
}
exception = e;
}
}
void CallComplete(bool completedSynchronously, Exception exception)
{
this.Complete(completedSynchronously, exception);
}
internal static void End(IAsyncResult result)
{
AsyncResult.End(result);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- OutputCacheSection.cs
- CheckBox.cs
- BoundColumn.cs
- SqlDependencyUtils.cs
- ToolStripEditorManager.cs
- ArgumentNullException.cs
- XPathScanner.cs
- ConnectorRouter.cs
- InputScopeNameConverter.cs
- RichTextBoxAutomationPeer.cs
- DetailsViewUpdateEventArgs.cs
- PropertyFilterAttribute.cs
- SoapAttributeOverrides.cs
- SamlAuthenticationStatement.cs
- Exceptions.cs
- TextTreeInsertUndoUnit.cs
- SHA256Managed.cs
- WebBaseEventKeyComparer.cs
- SafeHandles.cs
- WebConfigurationHostFileChange.cs
- DocumentSchemaValidator.cs
- DescendantBaseQuery.cs
- SafeTokenHandle.cs
- InstallerTypeAttribute.cs
- DataGridViewCellStateChangedEventArgs.cs
- MarkupObject.cs
- LineServices.cs
- TitleStyle.cs
- ScriptRegistrationManager.cs
- UnmanagedBitmapWrapper.cs
- MaskedTextProvider.cs
- NameTable.cs
- InteropDesigner.xaml.cs
- CorrelationManager.cs
- Socket.cs
- WindowsFormsSectionHandler.cs
- DockPattern.cs
- XamlSerializationHelper.cs
- AmbientValueAttribute.cs
- _Events.cs
- MimeParameterWriter.cs
- DiscardableAttribute.cs
- SqlMethods.cs
- TableColumn.cs
- PersistenceTypeAttribute.cs
- InstanceKeyCollisionException.cs
- ExceptionValidationRule.cs
- EpmContentDeSerializer.cs
- PageThemeParser.cs
- KeyValuePairs.cs
- MouseDevice.cs
- SqlBulkCopy.cs
- ScrollChrome.cs
- StylusPlugin.cs
- ServiceNameCollection.cs
- TreeViewEvent.cs
- _UncName.cs
- PingReply.cs
- StylusCollection.cs
- OleDbSchemaGuid.cs
- Registration.cs
- XmlNotation.cs
- UrlMapping.cs
- AuthenticationException.cs
- StorageAssociationSetMapping.cs
- DocumentAutomationPeer.cs
- CodeEventReferenceExpression.cs
- XmlSerializer.cs
- MinimizableAttributeTypeConverter.cs
- ReliableSession.cs
- FontDriver.cs
- ExternalDataExchangeService.cs
- Message.cs
- XmlAtomicValue.cs
- HtmlTableCellCollection.cs
- SqlConnectionFactory.cs
- Utils.cs
- Compiler.cs
- DesignerDataTableBase.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- MailHeaderInfo.cs
- TextEditor.cs
- IndexedDataBuffer.cs
- VirtualPathData.cs
- AsyncOperation.cs
- PageStatePersister.cs
- ExternalCalls.cs
- BitArray.cs
- DetailsViewUpdatedEventArgs.cs
- PartBasedPackageProperties.cs
- Int32AnimationUsingKeyFrames.cs
- DayRenderEvent.cs
- Thread.cs
- ExpressionBinding.cs
- SafeProcessHandle.cs
- SimpleTypeResolver.cs
- TaiwanLunisolarCalendar.cs
- TagMapCollection.cs
- TypeLoadException.cs
- XmlElement.cs