InvalidDataContractException Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
L’exception qui est levée lorsque le DataContractSerializer ou le NetDataContractSerializer rencontre un contrat de données non valide lors de la sérialisation et de la désérialisation.
public ref class InvalidDataContractException : Exception
public class InvalidDataContractException : Exception
[System.Serializable]
public class InvalidDataContractException : Exception
type InvalidDataContractException = class
inherit Exception
[<System.Serializable>]
type InvalidDataContractException = class
inherit Exception
Public Class InvalidDataContractException
Inherits Exception
- Héritage
- Attributs
Exemples
L'exemple suivant illustre un contrat de service, ICalculator
, qui inclut deux méthodes, Add
et MoreData
. La méthode MoreData
retourne une instance de la classe ExtraData
, qui est également déclarée dans le code. Lorsque l'interface Calculator
implémentée est exécutée, une InvalidDataContractException
sera levée parce que le ExtraData
n'est pas appliqué à la classe DataContractAttribute.
public class Test
{
static void Main()
{
try
{
Test t = new Test();
t.Run();
}
// Catch the InvalidDataContractException here.
catch(InvalidDataContractException iExc)
{
Console.WriteLine("You have an invalid data contract: ");
Console.WriteLine(iExc.Message);
Console.ReadLine();
}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
Console.WriteLine(exc.ToString() );
Console.ReadLine();
}
}
private void Run()
{
// Create a new WSHttpBinding and set the security mode to Message;
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);
// Create a ServiceHost instance, and add a metadata endpoint.
Uri baseUri= new Uri("http://localhost:1008/");
ServiceHost sh = new ServiceHost(typeof(Calculator), baseUri);
// Optional. Add a metadata endpoint. The method is defined below.
AddMetadataEndpoint(ref sh);
// Add an endpoint using the binding, and open the service.
sh.AddServiceEndpoint(typeof(ICalculator), b, "myCalculator");
sh.Open();
Console.WriteLine("Listening...");
Console.ReadLine();
}
private void AddMetadataEndpoint(ref ServiceHost sh)
{
Uri mex = new Uri(@"http://localhost:1001/metadata/");
ServiceMetadataBehavior sm = new ServiceMetadataBehavior();
sm.HttpGetEnabled = true;
sm.HttpGetUrl = mex;
sh.Description.Behaviors.Add(sm);
}
}
// This class will cause an InvalidDataContractException to be thrown because
// neither the DataContractAttribute nor DataMemberAttribute has been applied to it.
public class ExtraData
{
public System.Collections.Generic.List<string> RandomData;
}
[ServiceContract(ProtectionLevel=System.Net.Security.ProtectionLevel.EncryptAndSign) ]
interface ICalculator
{
[OperationContract]
double Add(double a, double b);
[OperationContract]
ExtraData MoreData();
}
public class Calculator : ICalculator
{
public double Add(double a, double b)
{
return a + b;
}
public ExtraData MoreData()
{
ExtraData ex = new ExtraData();
ex.RandomData.Add("Hello");
ex.RandomData.Add( "World" );
return ex;
}
}
Public Class Test
Shared Sub Main()
Try
Dim t As New Test()
t.Run()
' Catch the InvalidDataContractException here.
Catch iExc As InvalidDataContractException
Console.WriteLine("You have an invalid data contract: ")
Console.WriteLine(iExc.Message)
Console.ReadLine()
Catch exc As Exception
Console.WriteLine(exc.Message)
Console.WriteLine(exc.ToString())
Console.ReadLine()
End Try
End Sub
Private Sub Run()
' Create a new WSHttpBinding and set the security mode to Message;
Dim b As New WSHttpBinding(SecurityMode.Message)
' Create a ServiceHost instance, and add a metadata endpoint.
Dim baseUri As New Uri("http://localhost:1008/")
Dim sh As New ServiceHost(GetType(Calculator), baseUri)
' Optional. Add a metadata endpoint. The method is defined below.
AddMetadataEndpoint(sh)
' Add an endpoint using the binding, and open the service.
sh.AddServiceEndpoint(GetType(ICalculator), b, "myCalculator")
sh.Open()
Console.WriteLine("Listening...")
Console.ReadLine()
End Sub
Private Sub AddMetadataEndpoint(ByRef sh As ServiceHost)
Dim mex As New Uri("http://localhost:1001/metadata/")
Dim sm As New ServiceMetadataBehavior()
sm.HttpGetEnabled = True
sm.HttpGetUrl = mex
sh.Description.Behaviors.Add(sm)
End Sub
End Class
' This class will cause an InvalidDataContractException to be thrown because
' neither the DataContractAttribute nor DataMemberAttribute has been applied to it.
Public Class ExtraData
Public RandomData As System.Collections.Generic.List(Of String)
End Class
<ServiceContract(ProtectionLevel := System.Net.Security.ProtectionLevel.EncryptAndSign)> _
Interface ICalculator
<OperationContract()> _
Function Add(ByVal a As Double, ByVal b As Double) As Double
<OperationContract()> _
Function MoreData() As ExtraData
End Interface
Public Class Calculator
Implements ICalculator
Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
Implements ICalculator.Add
Return a + b
End Function
Public Function MoreData() As ExtraData Implements ICalculator.MoreData
Dim ex As New ExtraData()
ex.RandomData.Add("Hello")
ex.RandomData.Add("World")
Return ex
End Function
End Class
Remarques
Une instance de ce type sera levée si le DataContractSerializer ou le NetDataContractSerializer détecte que le type de l'instance étant sérialisée ou désérialisée n'est pas valide. Une instance de ce type sera également levée si un type non valide est passé au moteur d'importation ou d'exportation de schéma.
Constructeurs
InvalidDataContractException() |
Initialise une nouvelle instance de la classe InvalidDataContractException. |
InvalidDataContractException(SerializationInfo, StreamingContext) |
Obsolète.
Initialise une nouvelle instance de la classe InvalidDataContractException avec les SerializationInfo et StreamingContext spécifiés. |
InvalidDataContractException(String) |
Initialise une nouvelle instance de la classe InvalidDataContractException avec le message d'erreur spécifié. |
InvalidDataContractException(String, Exception) |
Initialise une nouvelle instance de la classe InvalidDataContractException avec le message d'erreur et l'exception interne spécifiés. |
Propriétés
Data |
Obtient une collection de paires clé/valeur qui fournissent des informations définies par l'utilisateur supplémentaires sur l'exception. (Hérité de Exception) |
HelpLink |
Obtient ou définit un lien vers le fichier d'aide associé à cette exception. (Hérité de Exception) |
HResult |
Obtient ou définit HRESULT, valeur numérique codée qui est assignée à une exception spécifique. (Hérité de Exception) |
InnerException |
Obtient l'instance Exception qui a provoqué l'exception actuelle. (Hérité de Exception) |
Message |
Obtient un message qui décrit l'exception active. (Hérité de Exception) |
Source |
Obtient ou définit le nom de l'application ou de l'objet qui est à l'origine de l'erreur. (Hérité de Exception) |
StackTrace |
Obtient une représentation sous forme de chaîne des frames immédiats sur la pile des appels. (Hérité de Exception) |
TargetSite |
Obtient la méthode qui lève l'exception actuelle. (Hérité de Exception) |
Méthodes
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
GetBaseException() |
En cas de substitution dans une classe dérivée, retourne la Exception qui est à l'origine d'une ou de plusieurs exceptions ultérieures. (Hérité de Exception) |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Obsolète.
En cas de substitution dans une classe dérivée, définit SerializationInfo avec des informations sur l'exception. (Hérité de Exception) |
GetType() |
Obtient le type au moment de l'exécution de l'instance actuelle. (Hérité de Exception) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Crée et retourne une chaîne représentant l'exception actuelle. (Hérité de Exception) |
Événements
SerializeObjectState |
Obsolète.
Se produit quand une exception est sérialisée pour créer un objet d'état d'exception qui contient des données sérialisées concernant l'exception. (Hérité de Exception) |