示例#1
0
        private SoapClientMessage BeforeSerialize(WebRequest request, string methodName, object[] parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            SoapClientMethod method = this.clientType.GetMethod(methodName);

            if (method == null)
            {
                throw new ArgumentException(System.Web.Services.Res.GetString("WebInvalidMethodName", new object[1]
                {
                    (object)methodName
                }));
            }
            else
            {
                SoapExtension[]   soapExtensionArray = SoapMessage.InitializeExtensions((SoapReflectedExtension[])SoapHttpClientProtocol.CombineExtensionsHelper((Array)this.clientType.HighPriExtensions, (Array)method.extensions, (Array)this.clientType.LowPriExtensions, typeof(SoapReflectedExtension)), (object[])SoapHttpClientProtocol.CombineExtensionsHelper((Array)this.clientType.HighPriExtensionInitializers, (Array)method.extensionInitializers, (Array)this.clientType.LowPriExtensionInitializers, typeof(object)));
                SoapClientMessage soapClientMessage  = new SoapClientMessage(this, method, this.Url);
                soapClientMessage.initializedExtensions = soapExtensionArray;
                if (soapExtensionArray != null)
                {
                    soapClientMessage.SetExtensionStream(new SoapExtensionStream());
                }
                soapClientMessage.InitExtensionStreamChain(soapClientMessage.initializedExtensions);
                string action = UrlEncoder.EscapeString(method.action, Encoding.UTF8);
                soapClientMessage.SetStage(SoapMessageStage.BeforeSerialize);
                if (this.version == SoapProtocolVersion.Soap12)
                {
                    soapClientMessage.ContentType = ContentType.Compose("application/soap+xml", this.RequestEncoding != null ? this.RequestEncoding : Encoding.UTF8, action);
                }
                else
                {
                    soapClientMessage.ContentType = ContentType.Compose("text/xml", this.RequestEncoding != null ? this.RequestEncoding : Encoding.UTF8);
                }
                soapClientMessage.SetParameterValues(parameters);
                SoapHeaderHandling.GetHeaderMembers(soapClientMessage.Headers, (object)this, method.inHeaderMappings, SoapHeaderDirection.In, true);
                soapClientMessage.RunExtensions(soapClientMessage.initializedExtensions, true);
                request.ContentType = soapClientMessage.ContentType;
                if (soapClientMessage.ContentEncoding != null && soapClientMessage.ContentEncoding.Length > 0)
                {
                    ((NameValueCollection)request.Headers)["Content-Encoding"] = soapClientMessage.ContentEncoding;
                }
                request.Method = "POST";
                if (this.version != SoapProtocolVersion.Soap12 && ((NameValueCollection)request.Headers)["SOAPAction"] == null)
                {
                    StringBuilder stringBuilder = new StringBuilder(action.Length + 2);
                    stringBuilder.Append('"');
                    stringBuilder.Append(action);
                    stringBuilder.Append('"');
                    ((NameValueCollection)request.Headers).Add("SOAPAction", ((object)stringBuilder).ToString());
                }
                return(soapClientMessage);
            }
        }