Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / CreateSequence.cs / 1 / CreateSequence.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System; using System.ServiceModel; using System.ServiceModel.Security; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; sealed class CreateSequence : BodyWriter { AddressingVersion addressingVersion; IClientReliableChannelBinder binder; UniqueId offerIdentifier; bool ordered; ReliableMessagingVersion reliableMessagingVersion; CreateSequence() : base(true) { } public CreateSequence(AddressingVersion addressingVersion, ReliableMessagingVersion reliableMessagingVersion, bool ordered, IClientReliableChannelBinder binder, UniqueId offerIdentifier) : base(true) { this.addressingVersion = addressingVersion; this.reliableMessagingVersion = reliableMessagingVersion; this.ordered = ordered; this.binder = binder; this.offerIdentifier = offerIdentifier; } public static CreateSequenceInfo Create(MessageVersion messageVersion, ReliableMessagingVersion reliableMessagingVersion, ISecureConversationSession securitySession, XmlDictionaryReader reader) { if (reader == null) { DiagnosticUtility.DebugAssert("Argument reader cannot be null."); } try { CreateSequenceInfo info = new CreateSequenceInfo(); WsrmFeb2005Dictionary wsrmFeb2005Dictionary = XD.WsrmFeb2005Dictionary; XmlDictionaryString wsrmNs = WsrmIndex.GetNamespace(reliableMessagingVersion); reader.ReadStartElement(wsrmFeb2005Dictionary.CreateSequence, wsrmNs); info.AcksTo = EndpointAddress.ReadFrom(messageVersion.Addressing, reader, wsrmFeb2005Dictionary.AcksTo, wsrmNs); if (reader.IsStartElement(wsrmFeb2005Dictionary.Expires, wsrmNs)) { info.Expires = reader.ReadElementContentAsTimeSpan(); } if (reader.IsStartElement(wsrmFeb2005Dictionary.Offer, wsrmNs)) { reader.ReadStartElement(); reader.ReadStartElement(wsrmFeb2005Dictionary.Identifier, wsrmNs); info.OfferIdentifier = reader.ReadContentAsUniqueId(); reader.ReadEndElement(); bool wsrm11 = reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11; Wsrm11Dictionary wsrm11Dictionary = wsrm11 ? DXD.Wsrm11Dictionary : null; if (wsrm11) { EndpointAddress endpoint = EndpointAddress.ReadFrom(messageVersion.Addressing, reader, wsrm11Dictionary.Endpoint, wsrmNs); if (endpoint.Uri != info.AcksTo.Uri) { string reason = SR.GetString(SR.CSRefusedAcksToMustEqualEndpoint); Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason))); } } if (reader.IsStartElement(wsrmFeb2005Dictionary.Expires, wsrmNs)) { info.OfferExpires = reader.ReadElementContentAsTimeSpan(); } if (wsrm11) { if (reader.IsStartElement(wsrm11Dictionary.IncompleteSequenceBehavior, wsrmNs)) { string incompleteSequenceBehavior = reader.ReadElementContentAsString(); if ((incompleteSequenceBehavior != Wsrm11Strings.DiscardEntireSequence) && (incompleteSequenceBehavior != Wsrm11Strings.DiscardFollowingFirstGap) && (incompleteSequenceBehavior != Wsrm11Strings.NoDiscard)) { string reason = SR.GetString(SR.CSRefusedInvalidIncompleteSequenceBehavior); Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason))); } // Otherwise ignore the value. } } while (reader.IsStartElement()) { reader.Skip(); } reader.ReadEndElement(); } // Check for security only if we expect a soap security session. if (securitySession != null) { bool hasValidToken = false; // Since the security element is amongst the extensible elements (i.e. there is no // gaurantee of ordering or placement), a loop is required to attempt to parse the // security element. while (reader.IsStartElement()) { if (securitySession.TryReadSessionTokenIdentifier(reader)) { hasValidToken = true; break; } reader.Skip(); } if (!hasValidToken) { string reason = SR.GetString(SR.CSRefusedRequiredSecurityElementMissing); Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason))); } } while (reader.IsStartElement()) { reader.Skip(); } reader.ReadEndElement(); if (reader.IsStartElement()) { string reason = SR.GetString(SR.CSRefusedUnexpectedElementAtEndOfCSMessage); Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason))); } return info; } catch (XmlException e) { string reason = SR.GetString(SR.CouldNotParseWithAction, WsrmIndex.GetCreateSequenceActionString(reliableMessagingVersion)); Message faultReply = WsrmUtilities.CreateCSRefusedProtocolFault(messageVersion, reliableMessagingVersion, reason); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(WsrmMessageInfo.CreateInternalFaultException(faultReply, reason, new ProtocolException(reason, e))); } } protected override void OnWriteBodyContents(XmlDictionaryWriter writer) { WsrmFeb2005Dictionary wsrmFeb2005Dictionary = XD.WsrmFeb2005Dictionary; XmlDictionaryString wsrmNs = WsrmIndex.GetNamespace(this.reliableMessagingVersion); writer.WriteStartElement(wsrmFeb2005Dictionary.CreateSequence, wsrmNs); EndpointAddress localAddress = this.binder.LocalAddress; localAddress.WriteTo(this.addressingVersion, writer, wsrmFeb2005Dictionary.AcksTo, wsrmNs); if (this.offerIdentifier != null) { writer.WriteStartElement(wsrmFeb2005Dictionary.Offer, wsrmNs); writer.WriteStartElement(wsrmFeb2005Dictionary.Identifier, wsrmNs); writer.WriteValue(this.offerIdentifier); writer.WriteEndElement(); if (this.reliableMessagingVersion == ReliableMessagingVersion.WSReliableMessaging11) { Wsrm11Dictionary wsrm11Dictionary = DXD.Wsrm11Dictionary; localAddress.WriteTo(this.addressingVersion, writer, wsrm11Dictionary.Endpoint, wsrmNs); writer.WriteStartElement(wsrm11Dictionary.IncompleteSequenceBehavior, wsrmNs); writer.WriteValue( this.ordered ? wsrm11Dictionary.DiscardFollowingFirstGap : wsrm11Dictionary.NoDiscard); writer.WriteEndElement(); } writer.WriteEndElement(); } ISecureConversationSession securitySession = this.binder.GetInnerSession() as ISecureConversationSession; if (securitySession != null) securitySession.WriteSessionTokenIdentifier(writer); writer.WriteEndElement(); } } } // 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
- RenderTargetBitmap.cs
- EditorPartCollection.cs
- FileNotFoundException.cs
- CounterSample.cs
- DefaultProxySection.cs
- KnownTypesProvider.cs
- ToolStripItemEventArgs.cs
- _KerberosClient.cs
- ChangeTracker.cs
- WeakReferenceKey.cs
- ShaperBuffers.cs
- OutputCacheSection.cs
- WebPartMinimizeVerb.cs
- PropertyMapper.cs
- HtmlTableCellCollection.cs
- ReadOnlyActivityGlyph.cs
- SqlDelegatedTransaction.cs
- SwitchElementsCollection.cs
- SqlParameterizer.cs
- Transform3DGroup.cs
- ExpressionEditorAttribute.cs
- SrgsElementList.cs
- XmlSchemaException.cs
- SmiConnection.cs
- CubicEase.cs
- HMAC.cs
- QueryAccessibilityHelpEvent.cs
- DoubleAverageAggregationOperator.cs
- HostedHttpRequestAsyncResult.cs
- ProjectionPlan.cs
- SpeechSynthesizer.cs
- NameValueConfigurationElement.cs
- DisplayNameAttribute.cs
- XamlTemplateSerializer.cs
- AutomationInteropProvider.cs
- _NestedSingleAsyncResult.cs
- CodeNamespaceImportCollection.cs
- NTAccount.cs
- WinInetCache.cs
- WebReferenceOptions.cs
- AttributeUsageAttribute.cs
- BamlTreeNode.cs
- Int16KeyFrameCollection.cs
- SqlDelegatedTransaction.cs
- MarginsConverter.cs
- StatusBar.cs
- FeatureSupport.cs
- SoapCodeExporter.cs
- FontNameConverter.cs
- TypeSemantics.cs
- FixedSOMImage.cs
- Ops.cs
- VersionedStream.cs
- OracleConnectionString.cs
- DesignerTransaction.cs
- DetailsViewDeletedEventArgs.cs
- FlowPosition.cs
- WeakEventManager.cs
- CompatibleIComparer.cs
- Stylus.cs
- RTLAwareMessageBox.cs
- RuleValidation.cs
- EntityDataSourceSelectedEventArgs.cs
- LineGeometry.cs
- SafeWaitHandle.cs
- FieldNameLookup.cs
- DesignerCategoryAttribute.cs
- FixedSOMElement.cs
- Rfc2898DeriveBytes.cs
- InfocardInteractiveChannelInitializer.cs
- ResourceType.cs
- ScriptIgnoreAttribute.cs
- XmlQueryContext.cs
- MetafileHeader.cs
- CheckBoxBaseAdapter.cs
- XPathEmptyIterator.cs
- StructuredTypeEmitter.cs
- ComAdminWrapper.cs
- GlobalId.cs
- OutputCacheSettingsSection.cs
- MetadataPropertyCollection.cs
- RootProfilePropertySettingsCollection.cs
- MimePart.cs
- RecognitionResult.cs
- RefExpr.cs
- ThrowOnMultipleAssignment.cs
- QilParameter.cs
- WinHttpWebProxyFinder.cs
- Variable.cs
- odbcmetadatacollectionnames.cs
- WasEndpointConfigContainer.cs
- ParentUndoUnit.cs
- PartManifestEntry.cs
- EmbeddedMailObjectsCollection.cs
- ValidationVisibilityAttribute.cs
- FixUpCollection.cs
- ClientFormsIdentity.cs
- _DisconnectOverlappedAsyncResult.cs
- EncoderBestFitFallback.cs
- LayoutExceptionEventArgs.cs