Alex Rivera | Logout

Strange 64/32-bit GUID issue under IIS7

Asked 2009-08-27T09:25:01.043
11

One of my team has recently come across an interesting glitch in the matrix. If anyone can help explain this it'd be great. It is possibly a complicated to explain, so bear with me.

We are building an ASP.Net application. In it we have a simple "if" statement.

Guid adminId = Guid.Empty;
if (mRoles.Contains("Admin"))
{
    adminId = mUserId;
}

(where mRoles is a List and contains “Admin”)

This works just as expected (i.e adminID is assigned the mUserId). However, when rewritten to use a ternary operator below it doesn't! (adminID is assigned Guid Empty)!

Guid adminId = mRoles.Contains("Admin") ? mUserId : Guid.Empty;

The developer that discovered this is on a 64-bit machine (IIS7/64-bit vista) and if he changes his settings in IIS as follows... Under "Default Application Pool" > "Advanced Settings" check "Enable 32-bit applications." Now both statements work!

We think that this is something to do possibly with the fact that a Guid is a struct rather than a class and that the value is somehow being offset under a 64-bit process.

I suspect the problem is similar to this... http://www.mail-archive.com/comtypes-users@lists.sourceforge.net/msg00164.html Which may explain why the first simple if statement works. (as creating the adminId variable is maybe creating a pointer and the ternary operator is not?)

If anyone could shed any light on this that’d be great. Is it a compatibility bug? or our misunderstanding of combining ternary operators and structs?

Thanks.

UPDATE

Put together a simple application and cannot reproduce it on a completely new project, so must be something else than the GUIDs.

// Works (assigns mUserId to adminId)

Guid adminId = true ? mUserId : Guid.Empty;

                    
                    
                    
Edit
Report

1 Answer

0

just wondering what type the 64bit machine thinks mUserId is? Presumably not a Guid.

answered 2009-08-27T10:14:27.853

Your Answer