When you want to use the PSI interface you need to have a PSContextInfo Class. Inside a Project Server Event this will be provided automatically, so you don't need to worry about its contents (except when you want to impersonate as a different user). But outside the Event you will need to create one from scratch.
One of the properties you need is the Site GUID. According to the SDK you can get this value in your code using three different methods:
- Hard-code the GUID (Not very flexible)
- Use the Windows SharePoint Services
SPSite.ID
property in the Windows SharePoint Services (Very heavy on resources) - Call the SiteData Web Service with the PWA URL (The best solution, if you ask me)
I use the third option in my application, but it did return an incorrect GUID. After some debugging, I finally found the problem. I requested the URL http://localhost/PWA/
and that was a mistake. The trailing /
results in getting the GUID of the root site, not the PWA site!
I am sure that I am not the first one falling in this pitfall, so this article is to prevent you from doing the same.