Exemple #1
0
        void CreateHeaderMessages(string methodName, SoapBindingUse use, XmlMembersMapping inHeaderMappings, XmlMembersMapping outHeaderMappings, SoapReflectedHeader[] headers)
        {
            // CONSIDER, alexdej: support headerfault.
            if (use == SoapBindingUse.Encoded)
            {
                SoapExporter.ExportMembersMapping(inHeaderMappings, false);
                if (outHeaderMappings != null)
                {
                    SoapExporter.ExportMembersMapping(outHeaderMappings, false);
                }
            }
            else
            {
                SchemaExporter.ExportMembersMapping(inHeaderMappings);
                if (outHeaderMappings != null)
                {
                    SchemaExporter.ExportMembersMapping(outHeaderMappings);
                }
            }

            CodeIdentifiers identifiers = new CodeIdentifiers();
            int             inCount = 0, outCount = 0;

            for (int i = 0; i < headers.Length; i++)
            {
                SoapReflectedHeader soapHeader = headers[i];
                if (!soapHeader.custom)
                {
                    continue;
                }

                XmlMemberMapping member;
                if ((soapHeader.direction & SoapHeaderDirection.In) != 0)
                {
                    member = inHeaderMappings[inCount++];
                    if (soapHeader.direction != SoapHeaderDirection.In)
                    {
                        outCount++;
                    }
                }
                else
                {
                    member = outHeaderMappings[outCount++];
                }

                MessagePart part = new MessagePart();
                part.Name = member.ElementName;
                if (use == SoapBindingUse.Encoded)
                {
                    part.Type = new XmlQualifiedName(member.TypeName, member.TypeNamespace);
                }
                else
                {
                    part.Element = new XmlQualifiedName(member.ElementName, member.Namespace);
                }

                Message message = new Message();
                message.Name = identifiers.AddUnique(methodName + part.Name, message);
                message.Parts.Add(part);
                HeaderMessages.Add(message);

                ServiceDescriptionFormatExtension soapHeaderBinding = CreateSoapHeaderBinding(new XmlQualifiedName(message.Name, Binding.ServiceDescription.TargetNamespace), part.Name, use);

                if ((soapHeader.direction & SoapHeaderDirection.In) != 0)
                {
                    OperationBinding.Input.Extensions.Add(soapHeaderBinding);
                }
                if ((soapHeader.direction & (SoapHeaderDirection.Out | SoapHeaderDirection.Fault)) != 0)
                {
                    OperationBinding.Output.Extensions.Add(soapHeaderBinding);
                }
            }
        }
        private void CreateHeaderMessages(string methodName, SoapBindingUse use, XmlMembersMapping inHeaderMappings, XmlMembersMapping outHeaderMappings, SoapReflectedHeader[] headers, bool rpc)
        {
            if (use == SoapBindingUse.Encoded)
            {
                this.SoapExporter.ExportMembersMapping(inHeaderMappings, false);
                if (outHeaderMappings != null)
                {
                    this.SoapExporter.ExportMembersMapping(outHeaderMappings, false);
                }
            }
            else
            {
                base.SchemaExporter.ExportMembersMapping(inHeaderMappings);
                if (outHeaderMappings != null)
                {
                    base.SchemaExporter.ExportMembersMapping(outHeaderMappings);
                }
            }
            CodeIdentifiers identifiers = new CodeIdentifiers();
            int             num         = 0;
            int             num2        = 0;

            for (int i = 0; i < headers.Length; i++)
            {
                SoapReflectedHeader header = headers[i];
                if (header.custom)
                {
                    XmlMemberMapping mapping;
                    Message          message;
                    if ((header.direction & SoapHeaderDirection.In) != 0)
                    {
                        mapping = inHeaderMappings[num++];
                        if (header.direction != SoapHeaderDirection.In)
                        {
                            num2++;
                        }
                    }
                    else
                    {
                        mapping = outHeaderMappings[num2++];
                    }
                    MessagePart messagePart = new MessagePart {
                        Name = mapping.XsdElementName
                    };
                    if (use == SoapBindingUse.Encoded)
                    {
                        messagePart.Type = new XmlQualifiedName(mapping.TypeName, mapping.TypeNamespace);
                    }
                    else
                    {
                        messagePart.Element = new XmlQualifiedName(mapping.XsdElementName, mapping.Namespace);
                    }
                    message = new Message {
                        Name = identifiers.AddUnique(methodName + messagePart.Name, message)
                    };
                    message.Parts.Add(messagePart);
                    base.HeaderMessages.Add(message);
                    ServiceDescriptionFormatExtension extension = this.CreateSoapHeaderBinding(new XmlQualifiedName(message.Name, base.Binding.ServiceDescription.TargetNamespace), messagePart.Name, rpc ? mapping.Namespace : null, use);
                    if ((header.direction & SoapHeaderDirection.In) != 0)
                    {
                        base.OperationBinding.Input.Extensions.Add(extension);
                    }
                    if ((header.direction & SoapHeaderDirection.Out) != 0)
                    {
                        base.OperationBinding.Output.Extensions.Add(extension);
                    }
                    if ((header.direction & SoapHeaderDirection.Fault) != 0)
                    {
                        if (this.soapMethod.IsClaimsConformance)
                        {
                            throw new InvalidOperationException(System.Web.Services.Res.GetString("BPConformanceHeaderFault", new object[] { this.soapMethod.methodInfo.ToString(), this.soapMethod.methodInfo.DeclaringType.FullName, "Direction", typeof(SoapHeaderDirection).Name, SoapHeaderDirection.Fault.ToString() }));
                        }
                        base.OperationBinding.Output.Extensions.Add(extension);
                    }
                }
            }
        }
        void CreateHeaderMessages(string methodName, SoapBindingUse use, XmlMembersMapping inHeaderMappings, XmlMembersMapping outHeaderMappings, SoapReflectedHeader[] headers, bool rpc)
        {
            //
            if (use == SoapBindingUse.Encoded)
            {
                SoapExporter.ExportMembersMapping(inHeaderMappings, false);
                if (outHeaderMappings != null)
                {
                    SoapExporter.ExportMembersMapping(outHeaderMappings, false);
                }
            }
            else
            {
                SchemaExporter.ExportMembersMapping(inHeaderMappings);
                if (outHeaderMappings != null)
                {
                    SchemaExporter.ExportMembersMapping(outHeaderMappings);
                }
            }

            CodeIdentifiers identifiers = new CodeIdentifiers();
            int             inCount = 0, outCount = 0;

            for (int i = 0; i < headers.Length; i++)
            {
                SoapReflectedHeader soapHeader = headers[i];
                if (!soapHeader.custom)
                {
                    continue;
                }

                XmlMemberMapping member;
                if ((soapHeader.direction & SoapHeaderDirection.In) != 0)
                {
                    member = inHeaderMappings[inCount++];
                    if (soapHeader.direction != SoapHeaderDirection.In)
                    {
                        outCount++;
                    }
                }
                else
                {
                    member = outHeaderMappings[outCount++];
                }

                MessagePart part = new MessagePart();
                part.Name = member.XsdElementName;
                if (use == SoapBindingUse.Encoded)
                {
                    part.Type = new XmlQualifiedName(member.TypeName, member.TypeNamespace);
                }
                else
                {
                    part.Element = new XmlQualifiedName(member.XsdElementName, member.Namespace);
                }
                Message message = new Message();
                message.Name = identifiers.AddUnique(methodName + part.Name, message);
                message.Parts.Add(part);
                HeaderMessages.Add(message);

                ServiceDescriptionFormatExtension soapHeaderBinding = CreateSoapHeaderBinding(new XmlQualifiedName(message.Name, Binding.ServiceDescription.TargetNamespace), part.Name, rpc ? member.Namespace : null, use);

                if ((soapHeader.direction & SoapHeaderDirection.In) != 0)
                {
                    OperationBinding.Input.Extensions.Add(soapHeaderBinding);
                }
                if ((soapHeader.direction & SoapHeaderDirection.Out) != 0)
                {
                    OperationBinding.Output.Extensions.Add(soapHeaderBinding);
                }

                if ((soapHeader.direction & SoapHeaderDirection.Fault) != 0)
                {
                    if (soapMethod.IsClaimsConformance)
                    {
                        throw new InvalidOperationException(Res.GetString(Res.BPConformanceHeaderFault, soapMethod.methodInfo.ToString(), soapMethod.methodInfo.DeclaringType.FullName, "Direction", typeof(SoapHeaderDirection).Name, SoapHeaderDirection.Fault.ToString()));
                    }
                    OperationBinding.Output.Extensions.Add(soapHeaderBinding);
                }
            }
        }