https://bugzilla.novell.com/show_bug.cgi?id=670560
https://bugzilla.novell.com/show_bug.cgi?id=670560#c0 Summary: WCF fails to unify Arrays and Lists in KnownTypeCollection Classification: Mono Product: Mono: Class Libraries Version: 2.8.x Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: P5 - None Component: WCF AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.84 Safari/534.13 When building the KnownTypeCollection for the following datacontract: [DataContract] public class Data { [DataMember] public Data[] DataArray { get; set; } [DataMember] public List<Data> DataList { get; set; } } it fails with the following exception: <?xml version="1.0" encoding="utf-8"?> <Fault xmlns="http://schemas.microsoft.com/ws/2005/05/envelope/none"> <Code> <Value xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">a:InternalServiceFault</Value></Code> <Reason> <Text xml:lang="en-GB">Failed to add type System.Collections.Generic.List`1[DataMemberTest.Data] to known type collection. There already is a registered type for XML name http://schemas.datacontract.org/2004/07/DataMemberTest:ArrayOfData: DataMemberTest.Data[]</Text></Reason> <Detail> <ExceptionDetail xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel"> <HelpLink i:nil="true" /> <InnerException i:nil="true" /> <Message>Failed to add type System.Collections.Generic.List`1[DataMemberTest.Data] to known type collection. There already is a registered type for XML name http://schemas.datacontract.org/2004/07/DataMemberTest:ArrayOfData: DataMemberTest.Data[]</Message> <StackTrace> at System.Runtime.Serialization.KnownTypeCollection.RegisterCollection (System.Type type) [0x0009c] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:717 at System.Runtime.Serialization.KnownTypeCollection.TryRegister (System.Type type) [0x00061] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:638 at System.Runtime.Serialization.SharedContractMap.GetMembers (System.Type type, System.Xml.XmlQualifiedName qname, Boolean declared_only) [0x0003d] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:551 at System.Runtime.Serialization.SharedContractMap.Initialize () [0x00053] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:530 at System.Runtime.Serialization.KnownTypeCollection.RegisterContract (System.Type type) [0x0004e] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:801 at System.Runtime.Serialization.KnownTypeCollection.TryRegister (System.Type type) [0x00045] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:632 at System.Runtime.Serialization.XsdDataContractExporter.ExportCore (System.Type type, Boolean rejectNonContract) [0x00091] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XsdDataContractExporter-new.cs:222 at System.Runtime.Serialization.XsdDataContractExporter.Export (System.Type type) [0x00000] in /srv/CCNet/mono/src/mono.git/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XsdDataContractExporter-new.cs:199 at System.ServiceModel.Description.WsdlExporter.GetSchemaElementForPart (System.ServiceModel.Description.MessagePartDescription part, System.Xml.Schema.XmlSchema schema) [0x00012] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:529 at System.ServiceModel.Description.WsdlExporter.ExportParameters (System.ServiceModel.Description.MessageBodyDescription msgbody, System.String name, System.String ns) [0x000da] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:469 at System.ServiceModel.Description.WsdlExporter.ExportMessageBodyDescription (System.ServiceModel.Description.MessageBodyDescription msgbody, System.String name, System.String ns) [0x00037] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:415 at System.ServiceModel.Description.WsdlExporter.ExportContractInternal (System.ServiceModel.Description.ContractDescription contract, Boolean rejectDuplicate) [0x00185] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:130 at System.ServiceModel.Description.WsdlExporter.ExportEndpoint (System.ServiceModel.Description.ServiceEndpoint endpoint, Boolean rejectDuplicate) [0x00000] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:188 at System.ServiceModel.Description.WsdlExporter.ExportEndpoints (IEnumerable`1 endpoints, System.Xml.XmlQualifiedName name) [0x0005a] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlExporter.cs:364 at System.ServiceModel.Description.ServiceMetadataExtension.get_Metadata () [0x00011] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataExtension.cs:74 at System.ServiceModel.Description.HttpGetWsdl.GetMetadata () [0x00012] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataExtension.cs:305 at System.ServiceModel.Description.HttpGetWsdl.EnsureMetadata () [0x0000b] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataExtension.cs:181 at System.ServiceModel.Description.HttpGetWsdl.Get (System.ServiceModel.Channels.Message req) [0x00000] in /srv/CCNet/mono/src/mono.git/mcs/class/System.ServiceModel/System.ServiceModel.Description/ServiceMetadataExtension.cs:188 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod*,object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000d5] in /srv/CCNet/mono/src/mono.git/mcs/class/corlib/System.Reflection/MonoMethod.cs:223 </StackTrace> <Type>System.InvalidOperationException</Type></ExceptionDetail></Detail></Fault> (i've added the colliding type to the error message in my local mono fork). As can be seen, the Array gets registered first and the try to register the List fails due to both being mapped to ArrayOfData. Please use the attached test solution to demonstrate the problem by trying to access the service's WSDL. Reproducible: Always -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
