public WsMessage(WsWsaHeader header, object body, WsPrefix prefixes, WsXmlNamespaces namespaces, WsAppSequence appSequence) { this.Header = header; this.Body = body; this.Prefixes = prefixes; this.Namespaces = namespaces; this.AppSequence = appSequence; }
public WsMessage( WsWsaHeader header, object body, WsPrefix prefixes, WsXmlNamespaces namespaces, WsAppSequence appSequence) { this.Header = header; this.Body = body; this.Prefixes = prefixes; this.Namespaces = namespaces; this.AppSequence = appSequence; }
public String WriteSoapMessageStart(XmlWriter writer, WsPrefix prefixes, WsXmlNamespaces additionalPrefixes, WsWsaHeader header, WsAppSequence appSequence, bool fSendHeader) { String messageId = "urn:uuid:" + Guid.NewGuid(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<s:Envelope xmlns:s=\"" + WsWellKnownUri.SoapNamespaceUri + "\" " + "xmlns:a=\"" + m_version.AddressingNamespace + "\" "; if ((prefixes & WsPrefix.Wsdp) != WsPrefix.None) { xml += "xmlns:p=\"" + m_version.WsdpNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wse) != WsPrefix.None) { xml += "xmlns:e=\"" + WsWellKnownUri.WseNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wsx) != WsPrefix.None) { xml += "xmlns:x=\"" + WsWellKnownUri.WsxNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wsd) != WsPrefix.None || appSequence != null) { xml += "xmlns:d=\"" + m_version.DiscoveryNamespace + "\" "; } if (additionalPrefixes != null) { int count = additionalPrefixes.Count; WsXmlNamespace current; for (int i = 0; i < count; i++) { current = additionalPrefixes[i]; xml += "xmlns:" + current.Prefix + "=\"" + current.NamespaceURI + "\" "; } } xml += ">"; if (fSendHeader) { xml += "<s:Header>" + "<a:Action" + (header.MustUnderstand ? " s:mustUnderstand=\"1\">" : ">") + header.Action + "</a:Action>" + "<a:MessageID>" + messageId + "</a:MessageID>" + "<a:To" + (header.MustUnderstand ? " s:mustUnderstand=\"1\">" : ">") + header.To + "</a:To>"; if (header.RelatesTo != null) { xml += "<a:RelatesTo>" + header.RelatesTo + "</a:RelatesTo>"; } if (header.From != null) { xml += "<a:From><a:Address>" + header.From.Address.AbsoluteUri + "</a:Address></a:From>"; } if (header.ReplyTo != null) { xml += "<a:ReplyTo><a:Address>" + header.ReplyTo.Address.AbsoluteUri + "</a:Address></a:ReplyTo>"; } if (appSequence != null) { xml += "<d:AppSequence InstanceId=\"" + appSequence.InstanceId + "\" "; if (appSequence.SequenceId != null) { xml += "SequenceId=\"" + appSequence.SequenceId + "\" "; } xml += "MessageNumber=\"" + appSequence.MessageNumber + "\"/>"; } writer.WriteRaw(xml); if (header.Any != null) { header.Any.WriteTo(writer); } writer.WriteRaw("</s:Header>"); } else { writer.WriteRaw(xml); } writer.WriteRaw("<s:Body>"); return(messageId); }
public String WriteSoapMessageStart(XmlWriter writer, WsPrefix prefixes, WsXmlNamespaces additionalPrefixes, WsWsaHeader header, WsAppSequence appSequence, bool fSendHeader) { String messageId = "urn:uuid:" + Guid.NewGuid(); String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<s:Envelope xmlns:s=\"" + WsWellKnownUri.SoapNamespaceUri + "\" " + "xmlns:a=\"" + m_version.AddressingNamespace + "\" "; if ((prefixes & WsPrefix.Wsdp) != WsPrefix.None) { xml += "xmlns:p=\"" + m_version.WsdpNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wse) != WsPrefix.None) { xml += "xmlns:e=\"" + WsWellKnownUri.WseNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wsx) != WsPrefix.None) { xml += "xmlns:x=\"" + WsWellKnownUri.WsxNamespaceUri + "\" "; } if ((prefixes & WsPrefix.Wsd) != WsPrefix.None || appSequence != null) { xml += "xmlns:d=\"" + m_version.DiscoveryNamespace + "\" "; } if (additionalPrefixes != null) { int count = additionalPrefixes.Count; WsXmlNamespace current; for (int i = 0; i < count; i++) { current = additionalPrefixes[i]; xml += "xmlns:" + current.Prefix + "=\"" + current.NamespaceURI + "\" "; } } xml += ">"; if(fSendHeader) { xml += "<s:Header>" + "<a:Action" + (header.MustUnderstand ? " s:mustUnderstand=\"1\">" : ">") + header.Action + "</a:Action>" + "<a:MessageID>" + messageId + "</a:MessageID>" + "<a:To" + (header.MustUnderstand ? " s:mustUnderstand=\"1\">" : ">") + header.To + "</a:To>"; if (header.RelatesTo != null) { xml += "<a:RelatesTo>" + header.RelatesTo + "</a:RelatesTo>"; } if (header.From != null) { xml += "<a:From><a:Address>" + header.From.Address.AbsoluteUri + "</a:Address></a:From>"; } if (header.ReplyTo != null) { xml += "<a:ReplyTo><a:Address>" + header.ReplyTo.Address.AbsoluteUri + "</a:Address></a:ReplyTo>"; } if (appSequence != null) { xml += "<d:AppSequence InstanceId=\"" + appSequence.InstanceId + "\" "; if(appSequence.SequenceId != null) { xml += "SequenceId=\"" + appSequence.SequenceId + "\" "; } xml += "MessageNumber=\"" + appSequence.MessageNumber + "\"/>"; } writer.WriteRaw(xml); if (header.Any != null) { header.Any.WriteTo(writer); } writer.WriteRaw("</s:Header>"); } else { writer.WriteRaw(xml); } writer.WriteRaw("<s:Body>"); return messageId; }
public WsMessage(WsWsaHeader header, object body, WsPrefix prefixes) { this.Header = header; this.Body = body; this.Prefixes = prefixes; }
public WsMessage( WsWsaHeader header, object body, WsPrefix prefixes ) { this.Header = header; this.Body = body; this.Prefixes = prefixes; }
internal static WsMessage GenerateFaultResponse(WsWsaHeader header, WsFaultType faultType, String details, ProtocolVersion version) { String code = String.Empty; String subcode = String.Empty; String reason = String.Empty; WsPrefix extraNS = WsPrefix.Wse; string faultAddress = null; if (header.FaultTo != null) { faultAddress = header.FaultTo.Address.OriginalString; } if (faultAddress == null) { faultAddress = version.AnonymousUri; } switch (faultType) { case WsFaultType.ArgumentException: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = "ArgumentException"; reason = "One of the arguments provided to a method is not valid."; break; case WsFaultType.ArgumentNullException: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = "ArgumentNullException"; reason = "A null reference was passed to a method that does not accept it as a valid argument."; break; case WsFaultType.Exception: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = "Exception"; reason = "Errors occured during application execution."; break; case WsFaultType.InvalidOperationException: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = "InvalidOperationException"; reason = "A method call is invalid for the object's current state."; break; case WsFaultType.XmlException: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = "XmlException"; reason = "Syntax errors found during parsing."; break; case WsFaultType.WsaInvalidMessageInformationHeader: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wsa + ":InvalidMessageInformationHeader"; reason = "A message information header is not valid and cannot be processed."; break; case WsFaultType.WsaMessageInformationHeaderRequired: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wsa + ":MessageInformationHeaderRequired"; reason = "A required message Information header, To, MessageID, or Action, is not present"; break; case WsFaultType.WsaDestinationUnreachable: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wsa + ":DestinationUnreachable"; reason = "No route can be determined to reach the destination role defined by the WS=Addressing To."; break; case WsFaultType.WsaActionNotSupported: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wsa + ":ActionNotSupported"; reason = "The [action] cannot be processed at the receiver."; break; case WsFaultType.WsaEndpointUnavailable: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = WsNamespacePrefix.Wsa + ":EndpointUnavailable"; reason = "The endpoint is unable to process the message at this time."; break; case WsFaultType.WseDeliverModeRequestedUnavailable: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":DeliverModeRequestedUnavailable"; reason = "The request delivery mode is not supported."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseInvalidExpirationTime: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":InvalidExpirationTime"; reason = "The expiration time requested is invalid."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseUnsupportedExpirationType: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":UnsupportedExpirationType"; reason = "Only expiration durations are supported."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseFilteringNotSupported: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":FilteringNotSupported"; reason = "Filtering is not supported."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseFilteringRequestedUnavailable: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":FilteringRequestedUnavailable"; reason = "The requested filter dialect is not supported."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseEventSourceUnableToProcess: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = WsNamespacePrefix.Wse + ":EventSourceUnableToProcess"; reason = "No explaination yet."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseUnableToRenew: code = WsNamespacePrefix.Soap + ":Receiver"; subcode = WsNamespacePrefix.Wse + ":UnableToRenew"; reason = "No explaination yet."; extraNS = WsPrefix.Wse; break; case WsFaultType.WseInvalidMessage: code = WsNamespacePrefix.Soap + ":Sender"; subcode = WsNamespacePrefix.Wse + ":InvalidMessage"; reason = "Message is not valid and cannot be processed."; extraNS = WsPrefix.Wse; break; } // Create the XmlWriter using (XmlMemoryWriter xmlWriter = XmlMemoryWriter.Create()) { // Generate the fault Header WsWsaHeader faultHeader = new WsWsaHeader( version.AddressingNamespace + "/fault", // Action header.MessageID, // RelatesTo faultAddress, // To null, null, null); // ReplyTo, From, Any WsMessage msg = new WsMessage(faultHeader, null, extraNS, null, null); WsSoapMessageWriter smw = new WsSoapMessageWriter(version); smw.WriteSoapMessageStart(xmlWriter, msg); // Generate fault Body xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Fault", null); xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Code", null); xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Value", null); xmlWriter.WriteString(code); xmlWriter.WriteEndElement(); // End Value xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Subcode", null); xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Value", null); xmlWriter.WriteString(subcode); xmlWriter.WriteEndElement(); // End Value xmlWriter.WriteEndElement(); // End Subcode xmlWriter.WriteEndElement(); // End Code xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Reason", null); xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Text", null); xmlWriter.WriteAttributeString("xml", "lang", "http://www.w3.org/XML/1998/namespace", "en-US"); xmlWriter.WriteString(reason); xmlWriter.WriteEndElement(); // End Text xmlWriter.WriteEndElement(); // End Reason xmlWriter.WriteStartElement(WsNamespacePrefix.Soap, "Detail", null); xmlWriter.WriteString(details); xmlWriter.WriteEndElement(); // End Detail xmlWriter.WriteEndElement(); // End Fault smw.WriteSoapMessageEnd(xmlWriter); msg.Body = xmlWriter.ToArray(); // Flush and close writer. Return stream buffer return(msg); } }