visual valid net method generate example documentacion comment comentarios code c# .net wcf web-services guid

valid - generate documentation c#



¿Guid es todos los 0(ceros)? (6)

Estoy probando algunos servicios WCF que envían objetos con Guids de ida y vuelta. En el código de prueba de mi aplicación web, estoy haciendo lo siguiente:

var responseObject = proxy.CallService(new RequestObject { Data = "misc. data", Guid = new Guid() });

Por alguna razón, la llamada a nuevo Guid () está generando Guid con todos los 0 (ceros) como este:

00000000-0000-0000-0000-000000000000

¿Qué podría estar causando esto?


En el espíritu de estar completo, las respuestas que le indican que use Guid.NewGuid() son correctas.

Al abordar su edición posterior, deberá publicar el código de su clase RequestObject . Sospecho que su propiedad guid no está marcada como DataMember y, por lo tanto, no se está serializando por el cable. Dado que el default(Guid) es el mismo que el new Guid() (es decir, todos los 0 ), esto explicaría el comportamiento que está viendo.


Intenta esto en su lugar:

Guid = Guid.NewGuid();

Esto generará un valor Guid ''real''. Cuando crea un nuevo tipo de referencia, le dará el valor predeterminado (que en este caso, es todos los ceros para un Guid).

Cuando creas un nuevo Guid, se inicializará en todos los ceros, que es el valor predeterminado para Guid. Básicamente, es lo mismo que crear un "nuevo" int (que es un tipo de valor, pero puede hacerlo de todos modos):

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

Compare esto con hacer lo mismo con un int:

int i1; // i1 is 0 int i2 = new int(); // i2 is 0 int i3 = default(int); // i3 is 0


Lecciones para aprender de esto:

1) Guid es un tipo de valor, no un tipo de referencia.

2) Llamar al constructor predeterminado new S() en cualquier tipo de valor siempre te devuelve la forma de cero de ese tipo de valor, sea lo que sea. Es lógicamente lo mismo que el default(S) .


No te puedo decir cuántas veces ha atrapado esto. yo.

Guid myGuid = Guid.NewGuid();


Trata de hacerlo:

Guid = Guid.NewGuid();


Use el método estático Guid.NewGuid() lugar de llamar al constructor predeterminado.

var responseObject = proxy.CallService(new RequestObject { Data = "misc. data", Guid = Guid.NewGuid() });