Je teste certains services WCF qui envoient des objets avec des Guids. Dans mon code de test d'application Web, je procède comme suit:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid()
});
Pour une raison quelconque, l'appel à new Guid () génère des Guids avec tous les 0 (zéros) comme ceci:
00000000-0000-0000-0000-000000000000
Qu'est-ce qui peut causer cela?
Utilisez la méthode statique Guid.NewGuid()
au lieu d'appeler le constructeur par défaut.
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = Guid.NewGuid()
});
Leçons à tirer de ceci:
1) Guid est un type de valeur, pas un type de référence.
2) L'appel du constructeur par défaut new S()
sur tout type de valeur vous restitue toujours la forme tout à zéro de ce type de valeur, quel qu'il soit. Il est logiquement identique à default(S)
.
Essayez ceci à la place:
var responseObject = proxy.CallService(new RequestObject
{
Data = "misc. data",
Guid = new Guid.NewGuid()
});
Cela générera une "vraie" valeur Guid. Lorsque vous créez un type de référence, il vous donnera la valeur par défaut (ce qui, dans ce cas, correspond à zéro pour un Guid).
Lorsque vous créez un nouveau Guid, il sera initialisé à tous les zéros, ce qui correspond à la valeur par défaut de Guid. C'est fondamentalement la même chose que de créer un "nouveau" int (qui est un type de valeur mais vous pouvez le faire quand même):
Guid g1; // g1 is 00000000-0000-0000-0000-000000000000
Guid g2 = new Guid(); // g2 is 00000000-0000-0000-0000-000000000000
Guid g3 = default(Guid); // g3 is 00000000-0000-0000-0000-000000000000
Guid g4 = Guid.NewGuid(); // g4 is not all zeroes
Comparez cela à faire la même chose avec un int:
int i1; // i1 is 0
int i2 = new int(); // i2 is 0
int i3 = default(int); // i3 is 0
Essayez de faire:
Guid foo = Guid.NewGuid();
Je ne peux pas vous dire combien de fois cela a été pris. moi.
Guid myGuid = Guid.NewGuid();
Dans l’esprit d’être complet, les réponses qui vous demandent d’utiliser Guid.NewGuid()
sont correctes.
En adressant votre édition ultérieure, vous devrez poster le code pour votre classe RequestObject
. Je soupçonne que votre propriété guid n'est pas marquée en tant que DataMember
et qu'elle n'est donc pas sérialisée sur le réseau. Puisque default(Guid)
est identique à new Guid()
(c'est-à-dire à tous les 0
]), cela expliquerait le comportement observé.