Beispiel #1
0
 private void GeneratePartType(Dictionary <XmlMembersMapping, XmlMembersMapping> alreadyExported, MessagePartDescription part)
 {
     if (this.partInfoTable.ContainsKey(part))
     {
         PartInfo          info           = this.partInfoTable[part];
         XmlMembersMapping membersMapping = info.MembersMapping;
         XmlMemberMapping  memberMapping  = info.MemberMapping;
         if (!alreadyExported.ContainsKey(membersMapping))
         {
             if (info.IsEncoded)
             {
                 this.SoapExporter.ExportMembersMapping(membersMapping);
             }
             else
             {
                 this.XmlExporter.ExportMembersMapping(membersMapping);
             }
             alreadyExported.Add(membersMapping, membersMapping);
         }
         CodeAttributeDeclarationCollection metadata = new CodeAttributeDeclarationCollection();
         if (info.IsEncoded)
         {
             this.SoapExporter.AddMappingMetadata(metadata, memberMapping, false);
         }
         else
         {
             this.XmlExporter.AddMappingMetadata(metadata, memberMapping, part.Namespace, false);
         }
         part.BaseType = this.GetTypeName(memberMapping);
         this.operationGenerator.ParameterTypes.Add(part, new CodeTypeReference(part.BaseType));
         this.operationGenerator.ParameterAttributes.Add(part, metadata);
     }
 }
Beispiel #2
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));
        }
Beispiel #3
0
        void CreateEncodedMessage(Message message, MessageBinding messageBinding, XmlMembersMapping members, bool wrapped)
        {
            SoapExporter.ExportMembersMapping(members, wrapped);

            if (wrapped)
            {
                MessagePart part = new MessagePart();
                part.Name = "parameters";
                part.Type = new XmlQualifiedName(members.TypeName, members.TypeNamespace);
                message.Parts.Add(part);
            }
            else
            {
                for (int i = 0; i < members.Count; i++)
                {
                    XmlMemberMapping member = members[i];
                    MessagePart      part   = new MessagePart();
                    part.Name = member.ElementName;
                    part.Type = new XmlQualifiedName(member.TypeName, member.TypeNamespace);
                    message.Parts.Add(part);
                }
            }

            messageBinding.Extensions.Add(CreateSoapBodyBinding(SoapBindingUse.Encoded, members.Namespace));
        }
 private void CreateEncodedMessage(Message message, MessageBinding messageBinding, XmlMembersMapping members, bool wrapped)
 {
     this.SoapExporter.ExportMembersMapping(members, wrapped);
     if (wrapped)
     {
         MessagePart messagePart = new MessagePart {
             Name = "parameters",
             Type = new XmlQualifiedName(members.TypeName, members.TypeNamespace)
         };
         message.Parts.Add(messagePart);
     }
     else
     {
         for (int i = 0; i < members.Count; i++)
         {
             XmlMemberMapping mapping = members[i];
             MessagePart      part2   = new MessagePart {
                 Name = mapping.XsdElementName,
                 Type = new XmlQualifiedName(mapping.TypeName, mapping.TypeNamespace)
             };
             message.Parts.Add(part2);
         }
     }
     messageBinding.Extensions.Add(this.CreateSoapBodyBinding(SoapBindingUse.Encoded, members.Namespace));
 }
Beispiel #5
0
                private void CreateHeaderDescriptionTable(MessageDescription message, MessageInfo info, XmlMembersMapping headersMapping)
                {
                    int headerNameIndex = 0;

                    OperationFormatter.MessageHeaderDescriptionTable headerDescriptionTable = new OperationFormatter.MessageHeaderDescriptionTable();
                    info.SetHeaderDescriptionTable(headerDescriptionTable);
                    foreach (MessageHeaderDescription header in message.Headers)
                    {
                        if (header.IsUnknownHeaderCollection)
                        {
                            info.SetUnknownHeaderDescription(header);
                        }
                        else if (headersMapping != null)
                        {
                            XmlMemberMapping memberMapping = headersMapping[headerNameIndex++];

                            if (GeneratedXmlSerializers.IsInitialized)
                            {
                                // If GeneratedXmlSerializers has been initialized, we would use the
                                // mappings generated by .Net Native tools. In that case, the mappings
                                // we genrated at Runtime are just fake mapping instance which have
                                // no valid name/namespace. Therefore we cannot do the checks in the
                                // else block. Those checks should have been done during NET Native
                                // precompilation.
                                headerDescriptionTable.Add(header.Name, header.Namespace, header);
                            }
                            else
                            {
                                string headerName, headerNs;
                                headerName = memberMapping.XsdElementName;
                                headerNs   = memberMapping.Namespace;
                                if (headerName != header.Name)
                                {
                                    if (message.MessageType != null)
                                    {
                                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.SFxHeaderNameMismatchInMessageContract, message.MessageType, header.MemberInfo.Name, header.Name, headerName)));
                                    }
                                    else
                                    {
                                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.SFxHeaderNameMismatchInOperation, this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, header.Name, headerName)));
                                    }
                                }
                                if (headerNs != header.Namespace)
                                {
                                    if (message.MessageType != null)
                                    {
                                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.SFxHeaderNamespaceMismatchInMessageContract, message.MessageType, header.MemberInfo.Name, header.Namespace, headerNs)));
                                    }
                                    else
                                    {
                                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.Format(SR.SFxHeaderNamespaceMismatchInOperation, this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, header.Namespace, headerNs)));
                                    }
                                }

                                headerDescriptionTable.Add(headerName, headerNs, header);
                            }
                        }
                    }
                }
        CodeParameterDeclarationExpression GenerateParameter(XmlMemberMapping member, FieldDirection dir)
        {
            string type = member.GenerateTypeName(CodeGenerator);
            CodeParameterDeclarationExpression par = new CodeParameterDeclarationExpression(type, member.MemberName);

            par.Direction = dir;
            return(par);
        }
Beispiel #7
0
        internal void Add(MessagePartDescription part, XmlMemberMapping memberMapping, XmlMembersMapping membersMapping, bool isEncoded)
        {
            PartInfo partInfo = new PartInfo();

            partInfo.MemberMapping  = memberMapping;
            partInfo.MembersMapping = membersMapping;
            partInfo.IsEncoded      = isEncoded;
            partInfoTable[part]     = partInfo;
        }
Beispiel #8
0
        internal void Add(MessagePartDescription part, XmlMemberMapping memberMapping, XmlMembersMapping membersMapping, bool isEncoded)
        {
            PartInfo info = new PartInfo {
                MemberMapping  = memberMapping,
                MembersMapping = membersMapping,
                IsEncoded      = isEncoded
            };

            this.partInfoTable[part] = info;
        }
Beispiel #9
0
 void GenerateReturnAttributes(XmlMembersMapping members, XmlMemberMapping member, SoapBindingUse use, CodeMemberMethod method)
 {
     if (use == SoapBindingUse.Literal)
     {
         xmlExporter.AddMappingMetadata(method.ReturnTypeCustomAttributes, member, members.Namespace, (member.ElementName != method.Name + "Result"));
     }
     else
     {
         soapExporter.AddMappingMetadata(method.ReturnTypeCustomAttributes, member, (member.ElementName != method.Name + "Result"));
     }
 }
Beispiel #10
0
        CodeParameterDeclarationExpression GenerateParameter(XmlMemberMapping member, FieldDirection dir)
        {
#if NET_2_0
            string type = member.GenerateTypeName(CodeGenerator);
#else
            string type = member.TypeFullName;
#endif
            CodeParameterDeclarationExpression par = new CodeParameterDeclarationExpression(type, member.MemberName);
            par.Direction = dir;
            return(par);
        }
Beispiel #11
0
 void GenerateMemberAttributes(XmlMembersMapping members, XmlMemberMapping member, SoapBindingUse use, CodeParameterDeclarationExpression param)
 {
     if (use == SoapBindingUse.Literal)
     {
         xmlExporter.AddMappingMetadata(param.CustomAttributes, member, members.Namespace);
     }
     else
     {
         soapExporter.AddMappingMetadata(param.CustomAttributes, member);
     }
 }
 private 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      name        = base.SchemaExporter.ExportAnyType(members[0].Namespace);
         MessagePart messagePart = new MessagePart {
             Name = members[0].MemberName,
             Type = new XmlQualifiedName(name, members[0].Namespace)
         };
         message.Parts.Add(messagePart);
     }
     else
     {
         base.SchemaExporter.ExportMembersMapping(members, !rpc);
         if (wrapped)
         {
             MessagePart part2 = new MessagePart {
                 Name    = "parameters",
                 Element = new XmlQualifiedName(members.XsdElementName, members.Namespace)
             };
             message.Parts.Add(part2);
         }
         else
         {
             for (int i = 0; i < members.Count; i++)
             {
                 XmlMemberMapping mapping = members[i];
                 MessagePart      part3   = new MessagePart();
                 if (rpc)
                 {
                     if ((mapping.TypeName == null) || (mapping.TypeName.Length == 0))
                     {
                         throw new InvalidOperationException(System.Web.Services.Res.GetString("WsdlGenRpcLitAnonimousType", new object[] { base.Method.DeclaringType.Name, base.Method.Name, mapping.MemberName }));
                     }
                     part3.Name = mapping.XsdElementName;
                     part3.Type = new XmlQualifiedName(mapping.TypeName, mapping.TypeNamespace);
                 }
                 else
                 {
                     part3.Name    = XmlConvert.EncodeLocalName(mapping.MemberName);
                     part3.Element = new XmlQualifiedName(mapping.XsdElementName, mapping.Namespace);
                 }
                 message.Parts.Add(part3);
             }
         }
     }
     messageBinding.Extensions.Add(this.CreateSoapBodyBinding(SoapBindingUse.Literal, rpc ? members.Namespace : null));
 }
Beispiel #13
0
        internal string GetTypeName(XmlMemberMapping member)
        {
            string str = member.GenerateTypeName(this.options.CodeProvider);

            if ((this.codeNamespace != null) && !string.IsNullOrEmpty(this.codeNamespace.Name))
            {
                foreach (CodeTypeDeclaration declaration in this.codeNamespace.Types)
                {
                    if (declaration.Name == str)
                    {
                        str = this.codeNamespace.Name + "." + str;
                    }
                }
            }
            return(str);
        }
                private void CreateHeaderDescriptionTable(MessageDescription message, XmlSerializerOperationBehavior.Reflector.MessageInfo info, XmlMembersMapping headersMapping)
                {
                    int num = 0;

                    OperationFormatter.MessageHeaderDescriptionTable headerDescriptionTable = new OperationFormatter.MessageHeaderDescriptionTable();
                    info.SetHeaderDescriptionTable(headerDescriptionTable);
                    foreach (MessageHeaderDescription description in message.Headers)
                    {
                        if (description.IsUnknownHeaderCollection)
                        {
                            info.SetUnknownHeaderDescription(description);
                        }
                        else if (headersMapping != null)
                        {
                            string           typeName;
                            string           typeNamespace;
                            XmlMemberMapping mapping = headersMapping[num++];
                            if (this.IsEncoded)
                            {
                                typeName      = mapping.TypeName;
                                typeNamespace = mapping.TypeNamespace;
                            }
                            else
                            {
                                typeName      = mapping.XsdElementName;
                                typeNamespace = mapping.Namespace;
                            }
                            if (typeName != description.Name)
                            {
                                if (message.MessageType != null)
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("SFxHeaderNameMismatchInMessageContract", new object[] { message.MessageType, description.MemberInfo.Name, description.Name, typeName })));
                                }
                                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("SFxHeaderNameMismatchInOperation", new object[] { this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, description.Name, typeName })));
                            }
                            if (typeNamespace != description.Namespace)
                            {
                                if (message.MessageType != null)
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("SFxHeaderNamespaceMismatchInMessageContract", new object[] { message.MessageType, description.MemberInfo.Name, description.Namespace, typeNamespace })));
                                }
                                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("SFxHeaderNamespaceMismatchInOperation", new object[] { this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, description.Namespace, typeNamespace })));
                            }
                            headerDescriptionTable.Add(typeName, typeNamespace, description);
                        }
                    }
                }
 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));
 }
Beispiel #16
0
                private void CreateHeaderDescriptionTable(MessageDescription message, MessageInfo info, XmlMembersMapping headersMapping)
                {
                    int headerNameIndex = 0;

                    OperationFormatter.MessageHeaderDescriptionTable headerDescriptionTable = new OperationFormatter.MessageHeaderDescriptionTable();
                    info.SetHeaderDescriptionTable(headerDescriptionTable);
                    foreach (MessageHeaderDescription header in message.Headers)
                    {
                        if (header.IsUnknownHeaderCollection)
                        {
                            info.SetUnknownHeaderDescription(header);
                        }
                        else if (headersMapping != null)
                        {
                            XmlMemberMapping memberMapping = headersMapping[headerNameIndex++];
                            string           headerName, headerNs;
                            headerName = memberMapping.XsdElementName;
                            headerNs   = memberMapping.Namespace;
                            if (headerName != header.Name)
                            {
                                if (message.MessageType != null)
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(SRServiceModel.SFxHeaderNameMismatchInMessageContract, message.MessageType, header.MemberInfo.Name, header.Name, headerName)));
                                }
                                else
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(SRServiceModel.SFxHeaderNameMismatchInOperation, this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, header.Name, headerName)));
                                }
                            }
                            if (headerNs != header.Namespace)
                            {
                                if (message.MessageType != null)
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(SRServiceModel.SFxHeaderNamespaceMismatchInMessageContract, message.MessageType, header.MemberInfo.Name, header.Namespace, headerNs)));
                                }
                                else
                                {
                                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(SRServiceModel.SFxHeaderNamespaceMismatchInOperation, this.Operation.Name, this.Operation.DeclaringContract.Name, this.Operation.DeclaringContract.Namespace, header.Namespace, headerNs)));
                                }
                            }

                            headerDescriptionTable.Add(headerName, headerNs, header);
                        }
                    }
                }
Beispiel #17
0
        internal XmlMembersMapping(TypeScope scope, ElementAccessor accessor, XmlMappingAccess access) : base(scope, accessor, access)
        {
            MembersMapping mapping = (MembersMapping)accessor.Mapping;
            StringBuilder  key     = new StringBuilder();

            key.Append(":");
            _mappings = new XmlMemberMapping[mapping.Members.Length];
            for (int i = 0; i < _mappings.Length; i++)
            {
                if (mapping.Members[i].TypeDesc.Type != null)
                {
                    key.Append(GenerateKey(mapping.Members[i].TypeDesc.Type, null, null));
                    key.Append(":");
                }
                _mappings[i] = new XmlMemberMapping(mapping.Members[i]);
            }
            SetKeyInternal(key.ToString());
        }
Beispiel #18
0
        internal string GetTypeName(XmlMemberMapping member)
        {
            string typeName = member.GenerateTypeName(options.CodeProvider);
            // If it is an array type, get the array element type name instead
            string comparableTypeName = typeName.Replace("[]", null);

            if (codeNamespace != null && !string.IsNullOrEmpty(codeNamespace.Name))
            {
                foreach (CodeTypeDeclaration typeDecl in codeNamespace.Types)
                {
                    if (typeDecl.Name == comparableTypeName)
                    {
                        typeName = codeNamespace.Name + "." + typeName;
                    }
                }
            }
            return(typeName);
        }
 private void ExportMembersMapping(XmlMembersMapping membersMapping, Message message, bool skipSchemaExport, bool isEncoded, bool isRpc, bool isDocWrapped, bool isHeader)
 {
     if (!skipSchemaExport)
     {
         if (isEncoded)
         {
             this.SoapExporter.ExportMembersMapping(membersMapping);
         }
         else
         {
             this.XmlExporter.ExportMembersMapping(membersMapping, !isRpc);
         }
     }
     if (isDocWrapped)
     {
         if (isHeader)
         {
             throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Header cannot be Document Wrapped", new object[0])));
         }
         MessageContractExporter.AddMessagePart(message, "parameters", new XmlQualifiedName(membersMapping.XsdElementName, membersMapping.Namespace), XmlQualifiedName.Empty);
     }
     else
     {
         bool flag = !isRpc && !isEncoded;
         for (int i = 0; i < membersMapping.Count; i++)
         {
             XmlMemberMapping mapping  = membersMapping[i];
             string           partName = (isHeader || flag) ? NamingHelper.XmlName(mapping.MemberName) : mapping.XsdElementName;
             if (flag)
             {
                 MessageContractExporter.AddMessagePart(message, partName, new XmlQualifiedName(mapping.XsdElementName, mapping.Namespace), XmlQualifiedName.Empty);
             }
             else
             {
                 if (string.IsNullOrEmpty(mapping.TypeName))
                 {
                     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("SFxAnonymousTypeNotSupported", new object[] { message.Name, partName })));
                 }
                 MessageContractExporter.AddMessagePart(message, partName, XmlQualifiedName.Empty, new XmlQualifiedName(mapping.TypeName, mapping.TypeNamespace));
             }
         }
     }
 }
        private static bool RemoveByRefMapping(ArrayList responseList, XmlMemberMapping requestMapping)
        {
            XmlMemberMapping mapping = FindMapping(responseList, requestMapping.ElementName);

            if (mapping == null)
            {
                return(false);
            }
            if (requestMapping.TypeFullName != mapping.TypeFullName)
            {
                return(false);
            }
            if (requestMapping.Namespace != mapping.Namespace)
            {
                return(false);
            }
            if (requestMapping.MemberName != mapping.MemberName)
            {
                return(false);
            }
            responseList.Remove(mapping);
            return(true);
        }
        string GetSimpleType(XmlMemberMapping member)
        {
            // MS seems to always use System.String for input parameters, except for byte[]

            switch (member.TypeName)
            {
            case "hexBinary":
            case "base64Binary":
                return("System.String");

            default:
                string ptype = member.TypeFullName;
                int    i     = ptype.IndexOf('[');
                if (i == -1)
                {
                    return("System.String");
                }
                else
                {
                    return("System.String" + ptype.Substring(i));
                }
            }
        }
Beispiel #22
0
        private void GeneratePartType(Dictionary <XmlMembersMapping, XmlMembersMapping> alreadyExported, MessagePartDescription part, string partNamespace)
        {
            if (!partInfoTable.ContainsKey(part))
            {
                return;
            }
            PartInfo          partInfo       = partInfoTable[part];
            XmlMembersMapping membersMapping = partInfo.MembersMapping;
            XmlMemberMapping  memberMapping  = partInfo.MemberMapping;

            if (!alreadyExported.ContainsKey(membersMapping))
            {
                if (partInfo.IsEncoded)
                {
                    SoapExporter.ExportMembersMapping(membersMapping);
                }
                else
                {
                    XmlExporter.ExportMembersMapping(membersMapping);
                }
                alreadyExported.Add(membersMapping, membersMapping);
            }
            CodeAttributeDeclarationCollection additionalAttributes = new CodeAttributeDeclarationCollection();

            if (partInfo.IsEncoded)
            {
                SoapExporter.AddMappingMetadata(additionalAttributes, memberMapping, false /*forceUseMemberName*/);
            }
            else
            {
                XmlExporter.AddMappingMetadata(additionalAttributes, memberMapping, partNamespace, false /*forceUseMemberName*/);
            }
            part.BaseType = GetTypeName(memberMapping);
            operationGenerator.ParameterTypes.Add(part, new CodeTypeReference(part.BaseType));
            operationGenerator.ParameterAttributes.Add(part, additionalAttributes);
        }
 internal static string FullTypeName(XmlMemberMapping mapping, CodeDomProvider codeProvider)
 {
     return(mapping.GenerateTypeName(codeProvider));
 }
        protected override bool ReflectMethod()
        {
            LogicalTypeInfo      ti  = TypeStubManager.GetLogicalTypeInfo(ServiceType);
            HttpOperationBinding sob = new HttpOperationBinding();

            sob.Location = "/" + MethodStubInfo.Name;
            OperationBinding.Extensions.Add(sob);

            if (!Method.IsVoid)
            {
                MimeXmlBinding mxb = new MimeXmlBinding();
                mxb.Part = "Body";
                OperationBinding.Output.Extensions.Add(mxb);

                MessagePart part = new MessagePart();
                part.Name = "Body";

                XmlTypeMapping   map   = ReflectionImporter.ImportTypeMapping(Method.ReturnType, ti.GetWebServiceLiteralNamespace(ServiceDescription.TargetNamespace));
                XmlQualifiedName qname = new XmlQualifiedName(map.ElementName, map.Namespace);
                part.Element = qname;
                OutputMessage.Parts.Add(part);
                SchemaExporter.ExportTypeMapping(map);
            }

            XmlReflectionMember[] mems = new XmlReflectionMember [Method.Parameters.Length];
            for (int n = 0; n < Method.Parameters.Length; n++)
            {
                ParameterInfo       param = Method.Parameters [n];
                XmlReflectionMember mem   = new XmlReflectionMember();
                mem.MemberName = param.Name;
                Type ptype = param.ParameterType;
                if (ptype.IsByRef)
                {
                    ptype = ptype.GetElementType();
                }
                mem.MemberType = ptype;
                mems [n]       = mem;
            }

            XmlMembersMapping memap = ReflectionImporter.ImportMembersMapping("", ti.WebServiceAbstractNamespace, mems, false);
            bool allPrimitives      = true;

            for (int n = 0; n < memap.Count; n++)
            {
                XmlMemberMapping mem  = memap[n];
                MessagePart      part = new MessagePart();
                XmlQualifiedName pqname;

                if (mem.TypeNamespace == "")
                {
                    pqname = new XmlQualifiedName(mem.TypeName, XmlSchema.Namespace);
                }
                else
                {
                    pqname        = new XmlQualifiedName(mem.TypeName, mem.TypeNamespace);
                    allPrimitives = false;
                }

                part.Type = pqname;
                part.Name = mem.ElementName;
                InputMessage.Parts.Add(part);
            }

            if (!allPrimitives)
            {
                SoapSchemaExporter.ExportMembersMapping(memap);
            }

            return(true);
        }
Beispiel #25
0
            protected override IList GetMethodReturnTypeAttributes(MethodInfo method)
            {
                IList attrs = base.GetMethodReturnTypeAttributes(method);

                // Add the XmlElementAttribute if needed
                if (operation.Messages.Output != null)
                {
                    if (method.ReturnType != typeof(void))
                    {
                        if (outputMembersMapping.Count > 0)
                        {
                            XmlMemberMapping outMemberMapping = outputMembersMapping[0];
                            bool             useMemberName    = (outMemberMapping.MemberName != operation.Name + "Result");
                            bool             useNamespace     = outMemberMapping.Namespace != outputMembersMapping.Namespace;
                            bool             useTypeNamespace = outMemberMapping.TypeNamespace != XmlSchema.Namespace &&
                                                                outMemberMapping.TypeNamespace != outputMembersMapping.Namespace;
                            if (useMemberName || useNamespace || useTypeNamespace)
                            {
                                if (outMemberMapping.TypeName.StartsWith("ArrayOf", StringComparison.Ordinal))
                                {
                                    if (useMemberName || useNamespace)
                                    {
                                        ReflectionUtils.CustomAttributeBuilderBuilder cabb =
                                            new ReflectionUtils.CustomAttributeBuilderBuilder(typeof(XmlArrayAttribute));
                                        if (useMemberName)
                                        {
                                            cabb.AddPropertyValue("ElementName", outMemberMapping.MemberName);
                                        }
                                        if (useNamespace)
                                        {
                                            cabb.AddPropertyValue("Namespace", outMemberMapping.Namespace);
                                        }
                                        attrs.Add(cabb.Build());
                                    }
                                    if (useTypeNamespace)
                                    {
                                        ReflectionUtils.CustomAttributeBuilderBuilder cabb =
                                            new ReflectionUtils.CustomAttributeBuilderBuilder(typeof(XmlArrayItemAttribute));
                                        cabb.AddPropertyValue("Namespace", outMemberMapping.TypeNamespace);
                                        attrs.Add(cabb.Build());
                                    }
                                }
                                else
                                {
                                    if (useMemberName || useNamespace)
                                    {
                                        ReflectionUtils.CustomAttributeBuilderBuilder cabb =
                                            new ReflectionUtils.CustomAttributeBuilderBuilder(typeof(XmlElementAttribute));
                                        if (useMemberName)
                                        {
                                            cabb.AddPropertyValue("ElementName", outMemberMapping.MemberName);
                                        }
                                        if (useNamespace)
                                        {
                                            cabb.AddPropertyValue("Namespace", outMemberMapping.Namespace);
                                        }
                                        attrs.Add(cabb.Build());
                                    }
                                }
                            }
                        }
                    }
                }

                return(attrs);
            }
Beispiel #26
0
 public void AddMappingMetadata(System.CodeDom.CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, string ns)
 {
 }
 public void AddMappingMetadata(System.CodeDom.CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, bool forceUseMemberName)
 {
 }
 public void AddMappingMetadata(System.CodeDom.CodeAttributeDeclarationCollection metadata, XmlMemberMapping member, bool forceUseMemberName)
 {
 }
 public void AddMappingMetadata(System.CodeDom.CodeAttributeDeclarationCollection metadata, XmlMemberMapping member)
 {
 }
        internal SoapParameters(XmlMembersMapping request, XmlMembersMapping response, string[] parameterOrder, CodeIdentifiers identifiers)
        {
            ArrayList mappingsList = new ArrayList();
            ArrayList list2        = new ArrayList();

            AddMappings(mappingsList, request);
            if (response != null)
            {
                AddMappings(list2, response);
            }
            if (parameterOrder != null)
            {
                for (int i = 0; i < parameterOrder.Length; i++)
                {
                    string           elementName    = parameterOrder[i];
                    XmlMemberMapping requestMapping = FindMapping(mappingsList, elementName);
                    SoapParameter    parameter      = new SoapParameter();
                    if (requestMapping != null)
                    {
                        if (RemoveByRefMapping(list2, requestMapping))
                        {
                            parameter.codeFlags = CodeFlags.IsByRef;
                        }
                        parameter.mapping = requestMapping;
                        mappingsList.Remove(requestMapping);
                        this.AddParameter(parameter);
                    }
                    else
                    {
                        XmlMemberMapping mapping2 = FindMapping(list2, elementName);
                        if (mapping2 != null)
                        {
                            parameter.codeFlags = CodeFlags.IsOut;
                            parameter.mapping   = mapping2;
                            list2.Remove(mapping2);
                            this.AddParameter(parameter);
                        }
                    }
                }
            }
            foreach (XmlMemberMapping mapping3 in mappingsList)
            {
                SoapParameter parameter2 = new SoapParameter();
                if (RemoveByRefMapping(list2, mapping3))
                {
                    parameter2.codeFlags = CodeFlags.IsByRef;
                }
                parameter2.mapping = mapping3;
                this.AddParameter(parameter2);
            }
            if (list2.Count > 0)
            {
                if (!((XmlMemberMapping)list2[0]).CheckSpecified)
                {
                    this.ret = (XmlMemberMapping)list2[0];
                    list2.RemoveAt(0);
                }
                foreach (XmlMemberMapping mapping4 in list2)
                {
                    SoapParameter parameter3 = new SoapParameter {
                        mapping   = mapping4,
                        codeFlags = CodeFlags.IsOut
                    };
                    this.AddParameter(parameter3);
                }
            }
            foreach (SoapParameter parameter4 in this.parameters)
            {
                parameter4.name = identifiers.MakeUnique(CodeIdentifier.MakeValid(parameter4.mapping.MemberName));
            }
        }