Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / infocard / Service / managed / Microsoft / InfoCards / InfoCardMetadataExchangeClient.cs / 2 / InfoCardMetadataExchangeClient.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace Microsoft.InfoCards { using System; using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Description; using System.Net; using IDT = Microsoft.InfoCards.Diagnostics.InfoCardTrace; using System.IO; using System.Text; internal class InfoCardMetadataExchangeClient :MetadataExchangeClient { HttpWebRequest m_currentHttpGetRequest; object m_abortSync; bool m_aborted; IWebProxy m_proxy; // // Summary: // Creates a HttpsTransportBindingelement for mex interactions // // Remarks: // We are manually creating a CustomBinding as opposed to relying on // new WSHttpBinding( SecurityMode.Transport ) ); which sets AuthenticationScheme // to Negotiate by default. Another difference is that new WSHttpBinding inserts // a irrelevant TransactionFlowBindingElement. This is "irrelevant" because // TransactionFlowBindingElement doesn't yield a channel when Transactions = false. // See CSDMain 7086 for details. // // Remarks: We're setting httpTransportBinding.AuthenticationScheme to Anonymous // for all legs including IP/STS leg // public static CustomBinding CreateBindingForMex() { HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement(); IDT.Assert( AuthenticationSchemes.Anonymous == httpsTransport.AuthenticationScheme, "AuthenticationScheme must be Anonymous and not NTLM/Negotiate" ); CustomBinding httpsBinding = new CustomBinding( new TextMessageEncodingBindingElement(), //the same encoding used when WsHttpBinding is used httpsTransport ); return httpsBinding; } public InfoCardMetadataExchangeClient() : base( CreateBindingForMex() ) { // // We enforce CardSpace restrictions on the WSHttpBinding binding // in the GetChannelFactory override // m_abortSync = new object(); } public IWebProxy Proxy { set { m_proxy = value; } } public void Abort() { lock( m_abortSync ) { if( null != m_currentHttpGetRequest ) { m_currentHttpGetRequest.Abort(); } else { ChannelFactoryfactory = base.GetChannelFactory(null,null,null); if( null != factory ) { factory.Abort(); } } m_aborted = true; } } protected internal override HttpWebRequest GetWebRequest( System.Uri location, string dialect, string identifier ) { if( 0 != String.Compare( location.Scheme, "https", StringComparison.OrdinalIgnoreCase ) ) { throw IDT.ThrowHelperError( new TrustExchangeException( SR.GetString( SR.NonHttpsURIFound, location.AbsoluteUri ) ) ); } HttpWebRequest request = base.GetWebRequest( location, dialect, identifier ); IDT.Assert( null == request.Credentials, "No creds should be set" ); IDT.Assert( null != m_proxy, "Set the proxy value before creating a WebRequest" ); request.Proxy = m_proxy; lock( m_abortSync ) { // // if we are already in an aborted state, ensure that the next request automatically aborts. // if( m_aborted ) { request.Abort(); } return (m_currentHttpGetRequest = request); } } protected internal override ChannelFactory GetChannelFactory( EndpointAddress metadataAddress, string dialect, string identifier ) { if( null != metadataAddress && 0 != String.Compare( metadataAddress.Uri.Scheme, "https", StringComparison.OrdinalIgnoreCase ) ) { throw IDT.ThrowHelperError( new TrustExchangeException( SR.GetString( SR.NonHttpsURIFound, metadataAddress.Uri.AbsoluteUri ) ) ); } IDT.Assert( null != m_proxy, "Set the proxy value before creating a WebRequest" ); ChannelFactory factory = base.GetChannelFactory( metadataAddress, dialect, identifier ); // // Can't set factory.Credentials.Windows.AllowNtlm = false; // Exception thrown that the factory.Credentials.Windows // "Object is immutable". // // WCF makes it read-only after the first leg in federation chain. // This is probably to ensure that settings on the channelFactory do not // change when multiple channels are created from the same channelFactory. // This happens specifically in ChannelFactory.Open() (which can be triggered by opening a // channel created by the factory) // factory.Endpoint.Binding = new CustomBinding( Utility.UpdateProxyForHttpAndRestrictTransportBinding( factory.Endpoint.Binding.CreateBindingElements(), m_proxy, true ) ); // Client auth on transport should be turned off for mex. lock( m_abortSync ) { // // if we are already in an aborted state, ensure that the next request automatically aborts. // if( m_aborted ) { factory.Abort(); } } return factory; } } } // 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
- WaitForChangedResult.cs
- ApplicationId.cs
- CookieProtection.cs
- SmiConnection.cs
- PeerNameResolver.cs
- Int32CollectionValueSerializer.cs
- XmlObjectSerializerReadContextComplex.cs
- BufferBuilder.cs
- AsymmetricSignatureDeformatter.cs
- ParallelQuery.cs
- DataRecordInternal.cs
- XmlQueryOutput.cs
- AsymmetricKeyExchangeDeformatter.cs
- ObjectCloneHelper.cs
- BinaryWriter.cs
- WebPartTransformerCollection.cs
- MembershipPasswordException.cs
- DefaultPrintController.cs
- ClientSettingsProvider.cs
- XmlSiteMapProvider.cs
- DataControlFieldHeaderCell.cs
- ParagraphVisual.cs
- SwitchAttribute.cs
- UrlMappingCollection.cs
- PriorityBinding.cs
- ConstNode.cs
- TreeNode.cs
- ContextStack.cs
- ParameterToken.cs
- DeploymentSectionCache.cs
- ThaiBuddhistCalendar.cs
- WCFModelStrings.Designer.cs
- ManagedWndProcTracker.cs
- FixedSOMTextRun.cs
- Event.cs
- QilDataSource.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- SamlSecurityToken.cs
- MsmqIntegrationInputMessage.cs
- BasicBrowserDialog.designer.cs
- PathTooLongException.cs
- CreateUserWizardStep.cs
- MissingMethodException.cs
- Repeater.cs
- SetIterators.cs
- AnimationClock.cs
- XmlObjectSerializerContext.cs
- SymmetricSecurityBindingElement.cs
- SvcMapFileSerializer.cs
- ParseNumbers.cs
- XPathEmptyIterator.cs
- ScriptDescriptor.cs
- ContainerActivationHelper.cs
- ASCIIEncoding.cs
- Int32CAMarshaler.cs
- MemberDomainMap.cs
- DefaultHttpHandler.cs
- Utilities.cs
- StrongTypingException.cs
- ErrorReporting.cs
- PathFigureCollection.cs
- ToolStripContainerActionList.cs
- SelfIssuedAuthRSAPKCS1SignatureDeformatter.cs
- DataContractSet.cs
- TreeNodeBindingDepthConverter.cs
- sitestring.cs
- BitmapFrame.cs
- SplayTreeNode.cs
- OdbcPermission.cs
- RegexBoyerMoore.cs
- NativeMethods.cs
- NameValueCollection.cs
- SinglePageViewer.cs
- SlotInfo.cs
- PropertyPushdownHelper.cs
- MailSettingsSection.cs
- RectAnimationClockResource.cs
- BaseParser.cs
- wgx_sdk_version.cs
- CompressEmulationStream.cs
- UnsupportedPolicyOptionsException.cs
- XsltContext.cs
- PanelStyle.cs
- TableSectionStyle.cs
- CodeTypeMemberCollection.cs
- RightsManagementPermission.cs
- ToolStripLabel.cs
- ParserStreamGeometryContext.cs
- SQLChars.cs
- XmlSchemaSubstitutionGroup.cs
- LocalizedNameDescriptionPair.cs
- FileNotFoundException.cs
- LinqMaximalSubtreeNominator.cs
- MembershipUser.cs
- OutputScope.cs
- SmiEventSink_Default.cs
- OutputCacheProfileCollection.cs
- SkipStoryboardToFill.cs
- ReceiveActivity.cs
- MonitorWrapper.cs