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)); }
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); }
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); }
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); }