internal override object[] ReadParameters() { message.InitExtensionStreamChain(message.otherExtensions); message.RunExtensions(message.otherExtensions); // do a sanity check on the content-type before we check the version since otherwise the error might be really nasty if (!ContentType.IsSoap(message.ContentType)) { throw new SoapException(Res.GetString(Res.WebRequestContent, message.ContentType, helper.HttpContentType), new XmlQualifiedName(Soap.ClientCode, Soap.Namespace), new SoapFaultSubcode(Soap12FaultCodes.UnsupportedMediaTypeFaultCode)); } // now that all the extensions have run, establish the real version of the request SetHelper(SoapServerProtocolHelper.GetHelper(this)); CheckHelperVersion(); // now do a more specific content-type check for soap 1.1 only (soap 1.2 allows various xml content types) if (version == SoapProtocolVersion.Soap11 && !ContentType.MatchesBase(message.ContentType, helper.HttpContentType)) { throw new SoapException(Res.GetString(Res.WebRequestContent, message.ContentType, helper.HttpContentType), new XmlQualifiedName(Soap.ClientCode, Soap.Namespace), new SoapFaultSubcode(Soap12FaultCodes.UnsupportedMediaTypeFaultCode)); } try { XmlTextReader reader = SoapServerProtocolHelper.GetXmlTextReader(message.ContentType, message.Stream); reader.MoveToContent(); reader.ReadStartElement(Soap.Envelope, helper.EnvelopeNs); reader.MoveToContent(); new SoapHeaderHandling().ReadHeaders(reader, serverMethod.inHeaderSerializer, message.Headers, serverMethod.inHeaderMappings, SoapHeaderDirection.In, helper.EnvelopeNs, serverMethod.use == SoapBindingUse.Encoded ? helper.EncodingNs : null); reader.MoveToContent(); reader.ReadStartElement(Soap.Body, helper.EnvelopeNs); reader.MoveToContent(); // SOAP12: not using encodingStyle //object[] values = (object[])serverMethod.parameterSerializer.Deserialize(reader, serverMethod.use == SoapBindingUse.Encoded ? helper.EncodingNs : null); object[] values = (object[])serverMethod.parameterSerializer.Deserialize(reader); while (reader.NodeType == XmlNodeType.Whitespace) { reader.Skip(); } if (reader.NodeType == XmlNodeType.None) { reader.Skip(); } else { reader.ReadEndElement(); } while (reader.NodeType == XmlNodeType.Whitespace) { reader.Skip(); } if (reader.NodeType == XmlNodeType.None) { reader.Skip(); } else { reader.ReadEndElement(); } message.SetParameterValues(values); return(values); } catch (SoapException) { throw; } catch (Exception e) { throw new SoapException(Res.GetString(Res.WebRequestUnableToRead), new XmlQualifiedName(Soap.ClientCode, Soap.Namespace), e); } }