public static MessageDescription CreateMessageDescription(
            Type messageType, string defaultNamespace, string action, bool isRequest, MessageContractAttribute mca)
        {
            MessageDescription md = new MessageDescription(
                action, isRequest ? MessageDirection.Input :
                MessageDirection.Output);

            md.MessageType = MessageFilterOutByRef(messageType);
            if (mca.HasProtectionLevel)
            {
                md.ProtectionLevel = mca.ProtectionLevel;
            }

            MessageBodyDescription mb = md.Body;

            if (mca.IsWrapped)
            {
                mb.WrapperName      = mca.WrapperName ?? messageType.Name;
                mb.WrapperNamespace = mca.WrapperNamespace ?? defaultNamespace;
            }

            int index = 0;

            foreach (MemberInfo bmi in messageType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                Type   mtype = null;
                string mname = null;
                if (bmi is FieldInfo)
                {
                    FieldInfo fi = (FieldInfo)bmi;
                    mtype = fi.FieldType;
                    mname = fi.Name;
                }
                else if (bmi is PropertyInfo)
                {
                    PropertyInfo pi = (PropertyInfo)bmi;
                    mtype = pi.PropertyType;
                    mname = pi.Name;
                }
                else
                {
                    continue;
                }

                MessageBodyMemberAttribute mba = GetMessageBodyMemberAttribute(bmi);
                if (mba == null)
                {
                    continue;
                }

                MessagePartDescription pd = CreatePartCore(mba, mname, defaultNamespace);
                pd.Index      = index++;
                pd.Type       = MessageFilterOutByRef(mtype);
                pd.MemberInfo = bmi;
                mb.Parts.Add(pd);
            }

            // FIXME: fill headers and properties.
            return(md);
        }
        static MessagePartDescription CreatePartCore(
            MessageBodyMemberAttribute mba, string defaultName,
            string defaultNamespace)
        {
            string pname = null, pns = null;

            if (mba != null)
            {
                if (mba.Name != null)
                {
                    pname = mba.Name;
                }
                if (mba.Namespace != null)
                {
                    pns = mba.Namespace;
                }
            }
            if (pname == null)
            {
                pname = defaultName;
            }
            if (pns == null)
            {
                pns = defaultNamespace;
            }

            return(new MessagePartDescription(pname, pns));
        }
Esempio n. 3
0
        static MessagePartDescription CreatePartCore(MessageBodyMemberAttribute mba, string defaultName, string defaultNamespace)
        {
            var ret = CreatePartCore <MessagePartDescription> (mba, defaultName, defaultNamespace, delegate(string n, string ns) { return(new MessagePartDescription(n, ns)); });

            ret.Index = mba.Order;
            return(ret);
        }
		public void ShouldGenerateCorrectElementNameInMessageContract()
		{
			ProjectMappingManagerSetup.InitializeManager(ServiceProvider, "ProjectMapping.ServiceContractDsl.Tests.xml");
			XsdMessage rootElement = CreateRoot<XsdMessage>(MessageContractElementName, MessageContractElementNamespace);
			rootElement.IsWrapped = true;
			rootElement.Element = "xsd:\\file.xsd?MyType";
			rootElement.ServiceContractModel.ProjectMappingTable = "WCF";
			rootElement.ServiceContractModel.SerializerType = SerializerType.DataContractSerializer;

			string content = RunTemplate(rootElement);
			
			EnsureType(ref content, "MyType");
			Type generatedType = CompileAndGetType(content);
			Assert.AreEqual<string>(MessageContractElementName, generatedType.Name);
			Assert.AreEqual<string>(DefaultNamespace, generatedType.Namespace);
			Assert.AreEqual<int>(2, generatedType.GetConstructors().Length);
			MessageContractAttribute messageContract = TypeAsserter.AssertAttribute<MessageContractAttribute>(generatedType);
			Assert.AreEqual<string>(MessageContractElementName, messageContract.WrapperName);
			Assert.IsNotNull(messageContract.WrapperNamespace);
			Assert.IsTrue(messageContract.IsWrapped);
			PropertyInfo property = generatedType.GetProperty("MyType");
			Assert.IsNotNull(property);
			MessageBodyMemberAttribute bodyAttr = TypeAsserter.AssertAttribute<MessageBodyMemberAttribute>(property);
			Assert.AreEqual<string>(messageContract.WrapperNamespace, bodyAttr.Namespace);
			Assert.AreEqual<int>(0, bodyAttr.Order);
		}
Esempio n. 5
0
        private string GetNamespace(XmlElementAttribute xmlElementAttr, MessageBodyMemberAttribute messageBodyMemberAttr)
        {
            if (xmlElementAttr != null && xmlElementAttr.Namespace != null)
            {
                return(xmlElementAttr.Namespace);
            }

            if (messageBodyMemberAttr != null && messageBodyMemberAttr.Namespace != null)
            {
                return(messageBodyMemberAttr.Namespace);
            }

            return(null);
        }
Esempio n. 6
0
        private int GetOrder(XmlElementAttribute xmlElementAttr, MessageBodyMemberAttribute messageBodyMemberAttr)
        {
            if (xmlElementAttr != null && xmlElementAttr.Order > 0)
            {
                return(xmlElementAttr.Order);
            }

            if (messageBodyMemberAttr != null && messageBodyMemberAttr.Order > 0)
            {
                return(messageBodyMemberAttr.Order);
            }

            return(0);
        }
        private static MessageBodyMemberAttribute ConvertFromServiceModelMessageBodyMemberAttribute(object attr)
        {
            Fx.Assert(attr.GetType().FullName.Equals(ServiceReflector.SMMessageBodyMemberAttributeFullName), "Expected attribute of type System.ServiceModel.MessageBodyMember");
            var    messageBody = new MessageBodyMemberAttribute();
            string tmpStr      = GetProperty <string>(attr, nameof(MessageBodyMemberAttribute.Name));

            if (!string.IsNullOrEmpty(tmpStr))
            {
                messageBody.Name = tmpStr;
            }
            tmpStr = GetProperty <string>(attr, nameof(MessageBodyMemberAttribute.Namespace));
            if (!string.IsNullOrEmpty(tmpStr))
            {
                messageBody.Namespace = tmpStr;
            }
            int order = GetProperty <int>(attr, nameof(MessageBodyMemberAttribute.Order));

            if (order >= 0)
            {
                messageBody.Order = order;
            }
            return(messageBody);
        }