Пример #1
0
        void CreateLiteralMessage(Message message, MessageBinding messageBinding, XmlMembersMapping members, bool wrapped)
        {
            if (members.Count == 1 && members[0].Any && members[0].ElementName.Length == 0 && !wrapped)
            {
                string      typeName = SchemaExporter.ExportAnyType(members[0].Namespace);
                MessagePart part     = new MessagePart();
                part.Name = members[0].MemberName;
                part.Type = new XmlQualifiedName(typeName, members[0].Namespace);
                message.Parts.Add(part);
            }
            else
            {
                SchemaExporter.ExportMembersMapping(members);
                if (wrapped)
                {
                    MessagePart part = new MessagePart();
                    part.Name    = "parameters";
                    part.Element = new XmlQualifiedName(members.ElementName, members.Namespace);
                    message.Parts.Add(part);
                }
                else
                {
                    for (int i = 0; i < members.Count; i++)
                    {
                        XmlMemberMapping member = members[i];
                        MessagePart      part   = new MessagePart();
                        part.Name    = member.MemberName;
                        part.Element = new XmlQualifiedName(member.ElementName, member.Namespace);
                        message.Parts.Add(part);
                    }
                }
            }

            messageBinding.Extensions.Add(CreateSoapBodyBinding(SoapBindingUse.Literal, null));
        }
Пример #2
0
 void CreateLiteralMessage(Message message, MessageBinding messageBinding, XmlMembersMapping members, bool wrapped, bool rpc)
 {
     if (members.Count == 1 && members[0].Any && members[0].ElementName.Length == 0 && !wrapped)
     {
         string      typeName = SchemaExporter.ExportAnyType(members[0].Namespace);
         MessagePart part     = new MessagePart();
         part.Name = members[0].MemberName;
         part.Type = new XmlQualifiedName(typeName, members[0].Namespace);
         message.Parts.Add(part);
     }
     else
     {
         SchemaExporter.ExportMembersMapping(members, !rpc);
         if (wrapped)
         {
             MessagePart part = new MessagePart();
             part.Name    = "parameters";
             part.Element = new XmlQualifiedName(members.XsdElementName, members.Namespace);
             message.Parts.Add(part);
         }
         else
         {
             for (int i = 0; i < members.Count; i++)
             {
                 XmlMemberMapping member = members[i];
                 MessagePart      part   = new MessagePart();
                 if (rpc)
                 {
                     // Generate massage part with the type attribute
                     if (member.TypeName == null || member.TypeName.Length == 0)
                     {
                         throw new InvalidOperationException(Res.GetString(Res.WsdlGenRpcLitAnonimousType, Method.DeclaringType.Name, Method.Name, member.MemberName));
                     }
                     part.Name = member.XsdElementName;
                     part.Type = new XmlQualifiedName(member.TypeName, member.TypeNamespace);
                 }
                 else
                 {
                     part.Name    = XmlConvert.EncodeLocalName(member.MemberName);
                     part.Element = new XmlQualifiedName(member.XsdElementName, member.Namespace);
                 }
                 message.Parts.Add(part);
             }
         }
     }
     messageBinding.Extensions.Add(CreateSoapBodyBinding(SoapBindingUse.Literal, rpc ? members.Namespace : null));
 }
Пример #3
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);
                }
            }
        }
Пример #4
0
        void ImportMessage(XmlMembersMapping members, Message msg)
        {
            SoapMethodStubInfo method  = (SoapMethodStubInfo)MethodStubInfo;
            bool needsEnclosingElement = (method.ParameterStyle == SoapParameterStyle.Wrapped &&
                                          method.SoapBindingStyle == SoapBindingStyle.Document);

            if (needsEnclosingElement)
            {
                MessagePart part = new MessagePart();
                part.Name = "parameters";
                XmlQualifiedName qname = new XmlQualifiedName(members.ElementName, members.Namespace);
                if (method.Use == SoapBindingUse.Literal)
                {
                    part.Element = qname;
                }
                else
                {
                    part.Type = qname;
                }
                msg.Parts.Add(part);
            }
            else
            {
                for (int n = 0; n < members.Count; n++)
                {
                    MessagePart part = new MessagePart();
                    part.Name = members[n].MemberName;

                    if (method.Use == SoapBindingUse.Literal)
                    {
                        if (members[n].Any)
                        {
                            part.Type = new XmlQualifiedName("any", members[n].Namespace);
                        }
                        else
                        {
                            part.Element = new XmlQualifiedName(members[n].ElementName, members[n].Namespace);
                        }
                    }
                    else
                    {
                        string namesp = members[n].TypeNamespace;
                        if (namesp == "")
                        {
                            namesp = members[n].Namespace;
                        }
                        part.Name = members[n].ElementName;
                        part.Type = new XmlQualifiedName(members[n].TypeName, namesp);
                    }
                    msg.Parts.Add(part);
                }
            }


            if (method.Use == SoapBindingUse.Literal)
            {
                SchemaExporter.ExportMembersMapping(members);
            }
            else
            {
                SoapSchemaExporter.ExportMembersMapping(members, needsEnclosingElement);
            }
        }
Пример #5
0
        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);
                }
            }
        }