internal override void WriteFault(XmlWriter writer, SoapException soapException, HttpStatusCode statusCode)
 {
     if ((statusCode == HttpStatusCode.InternalServerError) && (soapException != null))
     {
         SoapServerMessage message = base.ServerProtocol.Message;
         writer.WriteStartDocument();
         writer.WriteStartElement("soap", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
         writer.WriteAttributeString("xmlns", "soap", null, "http://schemas.xmlsoap.org/soap/envelope/");
         writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
         writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
         if (base.ServerProtocol.ServerMethod != null)
         {
             SoapHeaderHandling.WriteHeaders(writer, base.ServerProtocol.ServerMethod.outHeaderSerializer, message.Headers, base.ServerProtocol.ServerMethod.outHeaderMappings, SoapHeaderDirection.Fault, base.ServerProtocol.ServerMethod.use == SoapBindingUse.Encoded, base.ServerType.serviceNamespace, base.ServerType.serviceDefaultIsEncoded, "http://schemas.xmlsoap.org/soap/envelope/");
         }
         else
         {
             SoapHeaderHandling.WriteUnknownHeaders(writer, message.Headers, "http://schemas.xmlsoap.org/soap/envelope/");
         }
         writer.WriteStartElement("Body", "http://schemas.xmlsoap.org/soap/envelope/");
         writer.WriteStartElement("Fault", "http://schemas.xmlsoap.org/soap/envelope/");
         writer.WriteStartElement("faultcode", "");
         XmlQualifiedName name = TranslateFaultCode(soapException.Code);
         if (((name.Namespace != null) && (name.Namespace.Length > 0)) && (writer.LookupPrefix(name.Namespace) == null))
         {
             writer.WriteAttributeString("xmlns", "q0", null, name.Namespace);
         }
         writer.WriteQualifiedName(name.Name, name.Namespace);
         writer.WriteEndElement();
         writer.WriteStartElement("faultstring", "");
         if ((soapException.Lang != null) && (soapException.Lang.Length != 0))
         {
             writer.WriteAttributeString("xml", "lang", "http://www.w3.org/XML/1998/namespace", soapException.Lang);
         }
         writer.WriteString(base.ServerProtocol.GenerateFaultString(soapException));
         writer.WriteEndElement();
         string actor = soapException.Actor;
         if (actor.Length > 0)
         {
             writer.WriteElementString("faultactor", "", actor);
         }
         if (!(soapException is SoapHeaderException))
         {
             if (soapException.Detail == null)
             {
                 writer.WriteStartElement("detail", "");
                 writer.WriteEndElement();
             }
             else
             {
                 soapException.Detail.WriteTo(writer);
             }
         }
         writer.WriteEndElement();
         writer.WriteEndElement();
         writer.WriteEndElement();
         writer.Flush();
     }
 }
        internal override void WriteFault(XmlWriter writer, SoapException soapException)
        {
            writer.WriteStartDocument();
            writer.WriteStartElement("soap", Soap.Envelope, Soap12.Namespace);
            writer.WriteAttributeString("xmlns", "soap", null, Soap12.Namespace);
            writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
            writer.WriteAttributeString("xmlns", "xsd", null, XmlSchema.Namespace);
            if (ServerProtocol.ServerMethod != null)
            {
                SoapHeaderHandling.WriteHeaders(writer, ServerProtocol.ServerMethod.outHeaderSerializer, ServerProtocol.Message.Headers, ServerProtocol.ServerMethod.outHeaderMappings, SoapHeaderDirection.Fault, ServerProtocol.ServerMethod.use == SoapBindingUse.Encoded, ServerType.serviceNamespace, ServerType.serviceDefaultIsEncoded, Soap12.Namespace);
            }
            else
            {
                SoapHeaderHandling.WriteUnknownHeaders(writer, ServerProtocol.Message.Headers, Soap12.Namespace);
            }

            writer.WriteStartElement(Soap.Body, Soap12.Namespace);

            writer.WriteStartElement(Soap.Fault, Soap12.Namespace);
            writer.WriteStartElement(Soap12.FaultCode, Soap12.Namespace);
            WriteFaultCodeValue(writer, TranslateFaultCode(soapException.Code), soapException.Subcode);
            writer.WriteEndElement(); // </faultcode>
            writer.WriteElementString(Soap12.FaultReason, Soap12.Namespace, ServerProtocol.GenerateFaultString(soapException));
            // Only write an actor element if the actor was specified (it's optional for end-points)
            string actor = soapException.Actor;

            if (actor.Length > 0)
            {
                writer.WriteElementString(Soap12.FaultNode, Soap12.Namespace, actor);
            }

            string role = soapException.Role;

            if (role.Length > 0)
            {
                writer.WriteElementString(Soap12.FaultRole, Soap12.Namespace, role);
            }

            // Only write a FaultDetail element if exception is related to the body (not a header)
            if (!(soapException is SoapHeaderException))
            {
                if (soapException.Detail == null)
                {
                    writer.WriteStartElement(Soap12.FaultDetail, Soap12.Namespace);
                    writer.WriteEndElement();
                }
                else
                {
                    soapException.Detail.WriteTo(writer);
                }
            }
            writer.WriteEndElement();

            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.Flush();
        }
        internal override void WriteFault(XmlWriter writer, SoapException soapException)
        {
            SoapServerMessage message = ServerProtocol.Message;

            writer.WriteStartDocument();
            writer.WriteStartElement("soap", Soap.Envelope, Soap.Namespace);
            writer.WriteAttributeString("xmlns", "soap", null, Soap.Namespace);
            writer.WriteAttributeString("xmlns", "xsi", null, XmlSchema.InstanceNamespace);
            writer.WriteAttributeString("xmlns", "xsd", null, XmlSchema.Namespace);
            if (ServerProtocol.ServerMethod != null)
            {
                SoapHeaderHandling.WriteHeaders(writer, ServerProtocol.ServerMethod.outHeaderSerializer, message.Headers, ServerProtocol.ServerMethod.outHeaderMappings, SoapHeaderDirection.Fault, ServerProtocol.ServerMethod.use == SoapBindingUse.Encoded, ServerType.serviceNamespace, ServerType.serviceDefaultIsEncoded, Soap.Namespace);
            }
            else
            {
                SoapHeaderHandling.WriteUnknownHeaders(writer, message.Headers, Soap.Namespace);
            }
            writer.WriteStartElement(Soap.Body, Soap.Namespace);

            writer.WriteStartElement(Soap.Fault, Soap.Namespace);
            writer.WriteStartElement(Soap.FaultCode, "");
            XmlQualifiedName code = TranslateFaultCode(soapException.Code);

            if (code.Namespace != null && code.Namespace.Length > 0 && writer.LookupPrefix(code.Namespace) == null)
            {
                writer.WriteAttributeString("xmlns", "q0", null, code.Namespace);
            }
            writer.WriteQualifiedName(code.Name, code.Namespace);
            writer.WriteEndElement();
            writer.WriteElementString(Soap.FaultString, "", ServerProtocol.GenerateFaultString(soapException));
            // Only write an actor element if the actor was specified (it's optional for end-points)
            string actor = soapException.Actor;

            if (actor.Length > 0)
            {
                writer.WriteElementString(Soap.FaultActor, "", actor);
            }

            // Only write a FaultDetail element if exception is related to the body (not a header)
            if (!(soapException is SoapHeaderException))
            {
                if (soapException.Detail == null)
                {
                    writer.WriteStartElement(Soap.FaultDetail, "");
                    writer.WriteEndElement();
                }
                else
                {
                    soapException.Detail.WriteTo(writer);
                }
            }
            writer.WriteEndElement();

            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.Flush();
        }
Exemple #4
0
 internal override void WriteFault(XmlWriter writer, SoapException soapException, HttpStatusCode statusCode)
 {
     if ((statusCode == HttpStatusCode.InternalServerError) && (soapException != null))
     {
         writer.WriteStartDocument();
         writer.WriteStartElement("soap", "Envelope", "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteAttributeString("xmlns", "soap", null, "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteAttributeString("xmlns", "xsi", null, "http://www.w3.org/2001/XMLSchema-instance");
         writer.WriteAttributeString("xmlns", "xsd", null, "http://www.w3.org/2001/XMLSchema");
         if (base.ServerProtocol.ServerMethod != null)
         {
             SoapHeaderHandling.WriteHeaders(writer, base.ServerProtocol.ServerMethod.outHeaderSerializer, base.ServerProtocol.Message.Headers, base.ServerProtocol.ServerMethod.outHeaderMappings, SoapHeaderDirection.Fault, base.ServerProtocol.ServerMethod.use == SoapBindingUse.Encoded, base.ServerType.serviceNamespace, base.ServerType.serviceDefaultIsEncoded, "http://www.w3.org/2003/05/soap-envelope");
         }
         else
         {
             SoapHeaderHandling.WriteUnknownHeaders(writer, base.ServerProtocol.Message.Headers, "http://www.w3.org/2003/05/soap-envelope");
         }
         writer.WriteStartElement("Body", "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteStartElement("Fault", "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteStartElement("Code", "http://www.w3.org/2003/05/soap-envelope");
         WriteFaultCodeValue(writer, TranslateFaultCode(soapException.Code), soapException.SubCode);
         writer.WriteEndElement();
         writer.WriteStartElement("Reason", "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteStartElement("Text", "http://www.w3.org/2003/05/soap-envelope");
         writer.WriteAttributeString("xml", "lang", "http://www.w3.org/XML/1998/namespace", System.Web.Services.Res.GetString("XmlLang"));
         writer.WriteString(base.ServerProtocol.GenerateFaultString(soapException));
         writer.WriteEndElement();
         writer.WriteEndElement();
         string actor = soapException.Actor;
         if (actor.Length > 0)
         {
             writer.WriteElementString("Node", "http://www.w3.org/2003/05/soap-envelope", actor);
         }
         string role = soapException.Role;
         if (role.Length > 0)
         {
             writer.WriteElementString("Role", "http://www.w3.org/2003/05/soap-envelope", role);
         }
         if (!(soapException is SoapHeaderException))
         {
             if (soapException.Detail == null)
             {
                 writer.WriteStartElement("Detail", "http://www.w3.org/2003/05/soap-envelope");
                 writer.WriteEndElement();
             }
             else
             {
                 soapException.Detail.WriteTo(writer);
             }
         }
         writer.WriteEndElement();
         writer.WriteEndElement();
         writer.WriteEndElement();
         writer.Flush();
     }
 }