Good Day Tout le monde ...WCF Exception: Impossible d'ajouter à la liste des types connus
Je reçois une erreur WCF inattendu se plaignant de « types connus » qui sont le même nom, mais dans différents espaces-noms (voir erreur ci-dessous).
... s'il vous plaît gardez à l'esprit que je suis encore en train d'expérimenter avec tout cela.
aussi ...
Je comprends déjà la nature des forces régulières des services web vous pour aplatir votre hiérarchie d'objets, mais tout ce que j'ai lu dit que vous ne devez pas le faire avec WCF ... qui est pourquoi Je tente cela.
Mes questions sont ...
- Q: Est-il possible de dire WCF de NE PAS IGNORER l'espacement des noms?
- Q: Ai-je oublié une étiquette? Les balises WCF (ci-dessous) ne prennent-elles pas l'espace-nom dans le compte ?
- Q: Ai-je besoin d'aplatir mon objet hiérarchie ?
L'erreur de base est ...
type 'wcfFISH.StateManagement.Contractor.New' ne peut être ajouté à la liste des types connus depuis un autre type « wcfFISH.StateManagement.CostDivision .New ' avec le même nom de contrat de données ' wcfFISH.StateManagement.Contractor: Nouveau ' est déjà présent.
L'erreur ressemble ...
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.DataContractSerializerOperationBehavior
contract: http://tempuri.org/:IFishData ----> System.InvalidOperationException: Type 'wcfFISH.StateManagement.Contractor.New' cannot be added to list of known types since another type 'wcfFISH.StateManagement.CostDivision.New' with the same data contract name 'wcfFISH.StateManagement.Contractor:New' is already present.
at System.Runtime.Serialization.DataContract.CheckAndAdd(Type type, Dictionary`2 typesChecked, Dictionary`2& nameToDataContractTable)
at System.Runtime.Serialization.DataContract.ImportKnownTypeAttributes(Type type, Dictionary`2 typesChecked, Dictionary`2& knownDataContracts)
at System.Runtime.Serialization.DataContract.ImportKnownTypeAttributes(Type type)
at System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.get_KnownDataContracts()
at System.Runtime.Serialization.ClassDataContract.get_KnownDataContracts()
at System.Runtime.Serialization.DataContractSet.AddClassDataContract(ClassDataContract classDataContract)
at System.Runtime.Serialization.DataContractSet.Add(XmlQualifiedName name, DataContract dataContract)
at System.Runtime.Serialization.DataContractSet.AddClassDataContract(ClassDataContract classDataContract)
at System.Runtime.Serialization.DataContractSet.Add(XmlQualifiedName name, DataContract dataContract)
at System.Runtime.Serialization.DataContractSet.Add(Type type)
at System.Runtime.Serialization.XsdDataContractExporter.Export(Type type)
at System.ServiceModel.Description.MessageContractExporter.ExportType(Type type, String partName, String operationName, XmlSchemaType& xsdType)
at System.ServiceModel.Description.DataContractSerializerMessageContractExporter.ExportBody(Int32 messageIndex, Object state)
at System.ServiceModel.Description.MessageContractExporter.ExportMessage(Int32 messageIndex, Object state)
at System.ServiceModel.Description.MessageContractExporter.ExportMessageContract()
at System.ServiceModel.Description.DataContractSerializerOperationBehavior.System.ServiceModel.Description.IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext contractContext)
at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
--- End of inner ExceptionDetail stack trace ---
at System.ServiceModel.Description.WsdlExporter.CallExtension(WsdlContractConversionContext contractContext, IWsdlExportExtension extension)
at System.ServiceModel.Description.WsdlExporter.CallExportContract(WsdlContractConversionContext contractContext)
at System.ServiceModel.Description.WsdlExporter.ExportContract(ContractDescription contract)
at System.ServiceModel.Description.WsdlExporter.ExportEndpoint(ServiceEndpoint endpoint, XmlQualifiedName wsdlServiceQName)
at System.ServiceModel.Description.WsdlExporter.ExportEndpoints(IEnumerable`1 endpoints, XmlQualifiedName wsdlServiceQName)
at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()
at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData()
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] queries, Message& replyMessage)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest)
at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.Get(Message message)
at SyncInvokeGet(Object , Object[] , Object[])
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
Le code de service ressemble ...
namespace wcfFISH.StateManagement
{
[DataContract(Namespace = "wcfFISH.StateManagement")]
[KnownType(typeof(wcfFISH.StateManagement.C1FE.Approved))]
[KnownType(typeof(wcfFISH.StateManagement.C1FE.Denied))]
[KnownType(typeof(wcfFISH.StateManagement.C1FE.New))]
[KnownType(typeof(wcfFISH.StateManagement.C1FE.Pending))]
[KnownType(typeof(wcfFISH.StateManagement.Contractor.Authenticated))]
[KnownType(typeof(wcfFISH.StateManagement.Contractor.New))]
[KnownType(typeof(wcfFISH.StateManagement.CostDivision.Authenticated))]
[KnownType(typeof(wcfFISH.StateManagement.CostDivision.New))]
[KnownType(typeof(wcfFISH.StateManagement.ReportingPeriod.Closed))]
[KnownType(typeof(wcfFISH.StateManagement.ReportingPeriod.Open))]
public abstract class ObjectState
{
#region CONSTRUCTORS
protected ObjectState()
{ }
#endregion
#region PROPERTIES & FIELDS
#endregion
#region EVENTS
#endregion
#region METHODS
#endregion
}
}
Side note ...
Une autre raison pour laquelle je suis confus est les déclarations originales énumérées ci-dessous jamais causé un problème ... et ça fonctionnait bien! Ce n'est arrivé que lorsque j'ai ajouté CostDivision!
[KnownType(typeof(wcfFISH.StateManagement.C1FE.New))]
[KnownType(typeof(wcfFISH.StateManagement.Contractor.New))]
Dans le cas où je ne suis pas clair ...
Ma compréhension est WCF devrait comprendre la différence entre les classes suivantes:
[KnownType(typeof(wcfFISH.StateManagement.Contractor.Authenticated))]
[KnownType(typeof(wcfFISH.StateManagement.Contractor.New))]
[KnownType(typeof(wcfFISH.StateManagement.CostDivision.Authenticated))]
[KnownType(typeof(wcfFISH.StateManagement.CostDivision.New))]
Si elle ne comprend pas ...
Je suppose que ma seule option semble être d'aplatir le hiera rchy POUR TOUT à:
wcfFISH.StateManagement.Authenticated
wcfFISH.StateManagement.New
... est-ce ma seule option? (Espérons pas!)
Ouais, c'est essentiellement ce que dit le message d'erreur ... –
DOH! ...vous avez raison! Merci Muchas! –
Pas de problème, content de pouvoir aider. Entendons-le pour les pouvoirs psychiques! 8) – Task