Troubleshooting sessions from the Project Conference 2012

Just noticed that the Microsoft Project channel on Microsoft Showcase is hosting the sessions that Adrian and I did at this year’s Project Conference.  We covered a few different scenarios and tools that we use in our day to day jobs. We presented in two parts – part one was called PC319 and can be found at https://aka.ms/uhuix1 and part two was PC349 and can be found at https://aka.ms/frd1nl .  Other sessions are available too. I might also try and embed these – so they may appear below soon… (success!) PC319 PC349

Project Server 2010: Orphan baselines breaking the reporting publish

This problem has been around for a while and I know some customers were running into it very soon after the release, but we had been struggling to get a repro and understand exactly what was causing it.  We now understand the root cause and have a fix coming hopefully in the June 2012 Cumulative Update for Project Professional 2010 (no promises – but that is the current target) and there are some ways of working that can limit your chances of running into this – so decided we should share this to avoid continued inconvenience until we get the fix out there. First lets take a look at the symptoms.  The most usual indication of the problem, as the title suggests, is orphan baseline values leading to the error when publishing – a Failed But Not Blocking Correlation problem on a Reporting (Project Publish) job that will show several of the following errors if you click through for the error details: ReportingProjectChangeMessageFailed (24006) – The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmTaskBaseline_ProjectUID_TaskUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmTask”. The statement has been terminated.. GeneralQueueJobFailed (26000) – ReportingProjectPublish.ReportProjectPublishMessageEx These failures are for the reporting job – so will mean that reports based on the reporting database, and any fresh OLAP cube builds could be missing data. Sometimes there may also be a crash on saving, either with a fairly generic MSSOAP 16 Send Incomplete error from Project Professional 2010 (though a subsequent save will work fine), or from PWA a queue error – GeneralQueueException (9131) A Project Operation failed due to a Queue Exception. Sub Job ID is: . Exception details are: System.NullReferenceException: …at Microsoft.Office.Project.DataEdit.Assignments.AssignmentCalendarUpdateHelper.ConvertActualContourToElapsed(,,, There may then be issues with users accessing timesheets – The view failed to load.  Press OK to reload this view… (and OK will not help). The error that will be found in the ULS logs will refer to a Calendar whose UID cannot be found… Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Statusing.StatusingGetMyWorkForGridJson System.InvalidOperationException: CacheProjectBaseCalendars could not find project calendar for project. CalUid=0c13de33-2a07-4310-b091-c77990d9dd6a    The root of all these issues is that when you use any of the Save & Send options (XML, CSV, Excel etc.) that we are incorrectly changing some of the GUIDs associated with entities such as the tasks and calendars.  Now this isn’t affecting the main tasks and assignment GUIDs as these bad values are not persisted back to the database – but we do however create a new baseline for these non-existent new task GUIDs, and can also save a bad calendar GUID – which leads to the Timesheet problem. First the best way to avoid this issue, and then on to the detection and clean up at the database level. If you do need to use Save & Send then the best practice until we release the fix for this is to first save the plan to the server, and publish if you need to.  Then do whatever you need to with Save & Send, and then immediately after this – close and check in the plan – but do not re-save to the server.  Discard changes if it asks – but of course you will have needed to save BEFORE you did the Save & Send (just making sure you are paying attention) to avoid losing any changes you really needed.  As the bad stuff will also get persisted to the local cache, this is one of those rare occasions when you will find me suggesting that the project is removed from the local cache – after ensuring that the save and check-in completed successfully. WARNING – the following steps are direct queries against the Project Server databases – please be sure you are working against the right databases when using these – and have a database backup should any problems occur. The detection of this condition is pretty straightforward, as we are just looking for baselines that exist for a task that does not exist, so the following query executed against the Draft database will do this (Change the name to match your specific DBs – the default ProjectServer_ names are used below: — Detect for orphan baseline task records that can cause reporting publish job failures. USE ProjectServer_Draft — specify the appropriate draft database select PROJ_NAME, MTB.PROJ_UID,TASK_UID,TB_BASE_NUM from MSP_TASK_BASELINES MTB inner join MSP_PROJECTS MP on MTB.proj_uid=MP.proj_uid where TASK_UID not in (select TASK_UID from MSP_TASKS) This will return rows if the condition exists – and identify which projects – as before clean-up you will probably want to get them removed from the PM’s local cache as otherwise they could be re-introduced. The next scripts do the cleaning up in the DB, and they are simply deleting baseline records where the tasks are non-existent. — Script to run on the draft DB USE ProjectServer_Draft — specify the appropriate draft database delete from MSP_TASK_BASELINES where TASK_UID not in (select TASK_UID from MSP_TASKS) — Script to run on the published DB USE ProjectServer_Published — specify the appropriate published database delete from MSP_TASK_BASELINES where TASK_UID not in (select TASK_UID from MSP_TASKS) I hope this helps to understand the nature of the issue and ways to avoid it until the fix comes along.  Our apologies for the inconvenience I know this has caused many of our customers – and hopefully for those who have needed to re-run the clean-up scripts regularly this may give a way to reduce the pain. If you need any assistance with these steps then feel free to open a support incident – and when I say free I mean free – this is a bug and we do not charge for incidents that are due to bugs (or we will refund – which amounts to the same thing). The ULS log entry associated with the initial Queue errors above (for the benefit of the search engines): 05/01/2012 11:57:55.67    Microsoft.Office.Project.Server (0x1D74)    0x335C    Project Server    Reporting    atwj    Critical    Standard Information:PSI Entry Point:   Project User: REDMONDbrismith  Correlation Id: e1f4e953-7dea-448a-a528-709075c698bf  PWA Site URL: https://brismith8100/PWA   SSP Name: Project Server Service Application  PSError: ReportingProjectChangeMessageFailed (24006) RDS: The request to synchronize change(s) to project Project UID=’216733b0-e194-469a-afc3-9235da4ce4c1′. PublishType=’ProjectPublish’ failed.  Message: ‘ReportingProjectChangeMessageFailed’. Message Body: The INSERT statement conflicted with the FOREIGN KEY constraint “FK_MSP_EpmTaskBaseline_ProjectUID_TaskUID”. The conflict occurred in database “ProjectServer_Reporting”, table “dbo.MSP_EpmTask”.  The statement has been terminated. Error:(null)    e1f4e953-7dea-448a-a528-709075c698bf and for the Timesheet error: 05/01/2012 12:13:29.65    w3wp.exe (0x2444)    0x23D8    Project Server    Task Statusing and Updates    btw9    High    CacheProjectBaseCalendars: could not locate data for calendar 0c13de33-2a07-4310-b091-c77990d9dd6a for project 216733b0-e194-469a-afc3-9235da4ce4c1    e5dd4eaf-551a-469b-a3e0-1f60e2f3d1af 05/01/2012 12:13:29.85    w3wp.exe (0x2444)    0x23D8    Project Server    General    0000    Exception    Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Statusing.StatusingGetMyWorkForGridJson System.InvalidOperationException: CacheProjectBaseCalendars could not find project calendar for project. CalUid=0c13de33-2a07-4310-b091-c77990d9dd6a     at Microsoft.Office.Project.Server.BusinessLayer.TimePhasedDataAccess.CacheProjectBaseCalendars()     at Microsoft.Office.Project.Server.BusinessLayer.TimePhasedDataAccess..ctor(StatusingPageLoadDataSet dataset)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing.ReadStatusTimephasedDataForResource(IList`1 gridChanges, Guid[] vAssnUids, IDictionary`2 assn2proj, StatusingTimephasedPeriod[] tpd
Periods, DateTime tpStart, DateTime tpEnd)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing. c__DisplayClass57. b__56(IEnumerable`1 Keys)     at Microsoft.SharePoint.JSGrid.GridSerializer.BuildOutput()     at Microsoft.SharePoint.JSGrid.GridSerializer.ToJson(Serializer s)     at Microsoft.SharePoint.JsonUtilities.Serializer.SerializeToJson(Object o)     at Microsoft.Office.Project.Server.BusinessLayer.Statusing.GetMyWorkForGridJson(JsGridSerializerArguments gridSerializerArgs, String gridChangesJson, String projectAssignmentsMap, Guid viewUid, String timephasedStart, String timephasedEnd, Byte pane, Int32 durationType, Int32 workType, Int32 dateFormat, Boolean clearPersistedProperties, Nullable`1 rowFilterType)     at Microsoft.Office.Project.Server.Wcf.Implementation.PWAImpl.StatusingGetMyWorkForGridJson(JsGridSerializerArguments gridSerializerArgs, String gridChangesJson, String projectAssignmentsMap, Guid viewUid, String timephasedStart, String timephasedEnd, Byte pane, Int32 durationType, Int32 workType, Int32 dateFormat, Boolean clearPersistedProperties, Nullable`1 rowFilterType)    e5dd4eaf-551a-469b-a3e0-1f60e2f3d1af

Microsoft Project Server and SharePoint Server 2007 and 2010 April 2012 CU Announcement

In case you missed it over on the Admin blog site – the April CU announcement went out last week.  This covers the April 2012 Cumulative Update (CU) for Microsoft Project 2010, Microsoft Project Server 2010, Microsoft Office Project 2007 and Microsoft Project Server 2007.  More details see https://blogs.technet.com/b/projectadministration/archive/2012/04/27/microsoft-project-server-and-sharepoint-server-2007-and-2010-april-2012-cu-announcement.aspx .  The Project Server 2010 April 2012 CU also includes the fix for the duplicate Custom Field problem (unknown error in Project Center relating to filters, and also duplicates displayed in the PDPs) that was released just around the time of the February CU, please see the KB at https://support.microsoft.com/kb/2598251 for the detection and clean up scripts if you suffered from this issue.

Project Server 2010: An unknown error in Project Center, usually related to filters and duplicate custom field values

The fix for this frequently hit bug was released KB 2598251, and now the KB article at https://support.microsoft.com/kb/2598251 has been updated to include the SQL scripts that will clean up the duplicate values that lead to the error.  These scripts will correct the data, and the fix will stop the condition returning.  The fix itself has a version number of 14.0.6117.5002 – and if you load the February CU rollup package with this same version number then you will also get the fix.  The single Project Server package has been updated to point to the 2598251 patch – as this includes the fix, but also includes the February cumulative update. So to summarize: https://support.microsoft.com/kb/2598251 is the specific fix – and it includes the February CU for Project Server. https://support.microsoft.com/kb/2597152 is the February CU rollup package – and includes the fix as well as the full February CU for Project Server and SharePoint Server 2010 https://support.microsoft.com/kb/2597138 was the February CU for Project Server 2010, but has been withdrawn and instead redirects to the 2598251 patch. And finally – to help the search engines find this posting, the ULS logs will indicate an exception error similar to the following: Exception occurred in method Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectGetProjectCenterProjectsForGridJson Microsoft.Office.Project.Server.DataAccessLayer.FilterDal+FilterException: Error during filter query execution. Query: declare @ResUid UniqueIdentifier; set @ResUid = ff02387a-234e-4323-9e33-dbbf6f11880e; declare @PermUid UniqueIdentifier; set @PermUid = a120a079-75bc-4f0f-b376-3fb0ae9ac940; declare @ViewUid UniqueIdentifier; set @ViewUid = 63d3499e-df27-401c-af58-ebb9607beae8; declare @P0 UniqueIdentifier; set @P0 = 2d9ba6f2-d3d4-47f1-8661-5af3d695f8ed; declare @P1 UniqueIdentifier; set @P1 = 0ad53bb6-15ee-476a-ab05-7bb434b50466; SET NOCOUNT ON SELECT T.PROJ_UID INTO #T0 FROM dbo.MSP_PROJECTS AS P INNER JOIN dbo.MSP_TASKS AS T ON T.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_RESOURCES AS R ON R.RES_UID = P.WRES_UID LEFT JOIN dbo.MSP_WORKFLOW_STATUS AS WFSTS ON WFSTS.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_WEB_FN_SEC_GetAllProjectsResCanViewByViewID(@ResUid, @PermUid, @ViewUid, 3) AS perm ON perm.PROJ_UID = T.PROJ_UID LEFT JOIN dbo.ProjectSummaryCustomFields AS TABLEALIAS_0 ON TABLEALIAS_0.PROJ_UID = P.PROJ_UID AND TABLEALIAS_0.MD_PROP_UID = @P0 WHERE T.TASK_OPTINDX = 1.0 AND (ISNULL(WFSTS.STAGE_STATUS,-1) IN (-1, 1,2,3,5,6)) AND ((TABLEALIAS_0.CODE_VALUE @P1) OR (TABLEALIAS_0.CODE_VALUE IS NULL)) CREATE CLUSTERED INDEX PK_#T0 ON #T0 (PROJ_UID) SET NOCOUNT OFF SELECT T.PROJ_UID , P.PROJ_NAME , T.TASK_START_DATE , T.TASK_FINISH_DATE , T.TASK_PCT_COMP , T.TASK_WORK , T.TASK_DUR , R.RES_NAME , P.WPROJ_LAST_PUB , P.PROJ_OPT_MINUTES_PER_DAY , P.PROJ_OPT_MINUTES_PER_WEEK , P.PROJ_OPT_DAYS_PER_MONTH , T.TASK_SUMMARY_PROGRESS_DATE , T.TASK_IS_MILESTONE , dbo.MSP_FN_HYPERLINK_HREF(T.TASK_HYPERLINK_ADDRESS, T.TASK_HYPERLINK_SUB_ADDRESS) AS TASK_HYPERLINK_HREF , T.TASK_OUTLINE_LEVEL , P.PROJ_TYPE , T.TASK_DUR_FMT , P.WSTS_SERVER_UID , P.PROJ_OPT_CURRENCY_CODE , P.PROJ_ACTIVE_RISK_COUNT , P.PROJ_ACTIVE_ISSUE_COUNT , P.PROJ_TOTAL_DOC_COUNT , WOB.WOBJ_ISSUE_REF_CNT , WOB.WOBJ_RISK_REF_CNT , WOB.WOBJ_DOC_REF_CNT , PJSYNC.SYNC_WSS_LIST_UID , T.TASK_COMPLETE_THROUGH , (CASE WHEN T.TASK_UID=T.TASK_PARENT_UID THEN 1 ELSE 0 END) AS TASK_IS_PROJECT_SUMMARY FROM dbo.MSP_PROJECTS AS P INNER JOIN dbo.MSP_TASKS AS T ON T.PROJ_UID = P.PROJ_UID INNER JOIN dbo.MSP_RESOURCES AS R ON R.RES_UID = P.WRES_UID LEFT JOIN dbo.MSP_WORKFLOW_STATUS AS WFSTS ON WFSTS.PROJ_UID = P.PROJ_UID INNER JOIN #T0 AS keys ON keys.PROJ_UID = P.PROJ_UID LEFT JOIN (SELECT WOBJ_PROJ_UID as PROJ_UID,[4] as WOBJ_ISSUE_REF_CNT, [5] as WOBJ_RISK_REF_CNT, [3] as WOBJ_DOC_REF_CNT FROM ( SELECT WOBJ_TYPE, WOBJ_PROJ_UID FROM MSP_WEB_OBJECTS WHERE WOBJ_TASK_UID=’00000000-0000-0000-0000-000000000000′) pwob PIVOT (COUNT(WOBJ_TYPE) FOR WOBJ_TYPE in([3] ,[4],[5])) AS pvt) AS WOB ON WOB.PROJ_UID = P.PROJ_UID LEFT JOIN dbo.MSP_SYNC_PROJECT_SETTINGS AS PJSYNC ON PJSYNC.PROJ_UID = P.PROJ_UID WHERE T.TASK_OPTINDX = 1.0 AND (ISNULL(WFSTS.STAGE_STATUS,-1) IN (-1, 1,2,3,5,6)) DROP TABLE #T0; —> System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints. at System.Data.DataSet.EnableConstraints() at System.Data.DataSet.set_EnforceConstraints(Boolean value) at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.FillTypedDataSet(Boolean allowCache, DataSet typedDataSet, String[] tables, SqlCommand sqlCommand, Boolean enforceConstraints) at Microsoft.Office.Project.Server.DataAccessLayer.DAL.SubDal.FillTypedDataSet(DataSet typedDataSet, String[] tables, SqlCommand sqlCommand, Boolean enforceConstraints) at Microsoft.Office.Project.Server.DataAccessLayer.FilterDal.FillDataSet(QueryState queryState) — End of inner exception stack trace — at Microsoft.Office.Project.Server.DataAccessLayer.FilterDal.FillDataSet(QueryState queryState) at Microsoft.Office.Project.Server.Utility.FilterDalQueryInfo.Query() at Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectQueryInfo.Query() at Microsoft.Office.Project.Server.BusinessLayer.Project.ProjectCenterQueryInfo.Query() at Microsoft.Office.Project.Server.Utility.JsGridPopulationManager.InitializeSerializer(TableQueryInfo tableInfo, OrderInfo orderInfo, SliceInfo sliceInfo, Guid groupSchemeUid, Nullable`1 ganttSchemeUid, Boolean serializeStyles, Func`1 getChanges, Boolean serializeUnfilteredHierarchy, Boolean serializeLookupTableInfo, Boolean showTimeWithDates, String rowFilter) at Microsoft.Office.Project.Server.Utility.JsGridPopulationManager.InitializeSerializer(TableQueryInfo tableInfo, ViewPropertyGroup properties, JsGridSerializerArguments gridSerializerArgs, Func`1 getChanges) at Microsoft.Office.Project.Server.BusinessLayer.Project.GetProjectCenterProjectsForGridJson(JsGridSerializerArguments gridSerializerArgs, Guid viewUid, Int32 store, Boolean showInsertedProjects, Boolean clearPersistedProperties) at Microsoft.Office.Project.Server.Wcf.Implementation.PWAImpl.ProjectGetProjectCenterProjectsForGridJson(JsGridSerializerArguments gridSerializerArgs, Guid viewUid, Int32 store, Boolean showInsertedProjects, Boolean clearPersistedProperties)

Project 2010: Problems with installing, setup or activation?

The initial installation, setup and activation of Microsoft Project can raise issues and we see quite a few calls on this topic, so wanted to put together some links that might help – and save you having to call Microsoft.  Often the issue relates to a clash of versions or sku’s, and sometimes it may be due to a version of Office that came pre-loaded – the Office 2010 Starter.  Hopefully these links will help – along with links to resolve common issues such as a message about invalid product keys, or if you have lost or damaged your Office 2010 product key. First some wizards to help with product key problems: Are you receiving an invalid product key error in Microsoft Office 2010? – https://support.microsoft.com/kb/836178 How to replace a lost or damaged Microsoft Office product key – https://support.microsoft.com/kb/823570 If you are using Volume Licensing and MAK key then this is a good blog posting to read – https://blogs.technet.com/b/odsupport/archive/2011/04/15/getting-invalid-product-key-error-when-trying-to-input-mak-key-for-volume-license-version-of-office-2010.aspx . Another common question is around side-by-side installation – either where Project is being installed with another version of Office (such as upgrading to Project 2010 but still using Office 2007) – or even having multiple versions of Project on the same system.  The best guidance here is firstly only do this if you really, really need to, and to install in a separate directory, and the first thing to try if any errors are seen is to repair the original installation.  For example if you load Project 2010 and then see any issues with Office 2007 – run a repair on Office 2007.  With multiple versions of Project there is another potential issue – and that is which version should start when you click on an mpp – and the rule of thumb here is that the last one installed will win.  So either install to ensure the one you wish to be the one to load mpps is the last one – or run a repair on the one you want to be considered the ‘current’ version for opening mpps.  You can also set the default version via Control Panel, Programs, Default Programs, Set Associations – select mpp then Change program and browse for the specific winproj.exe in whichever directory you loaded the version you wish to open mpps.  Another consideration if working with side-by-side is that there have been some behavior changes in the various releases – so it is best avoided to keep moving plans back and forth between versions.

Microsoft Project Conference 2012

Just back in the office after a great conference.  It was a pleasure to meet up with so many people who read the blog – some I have known many years and others I have only known through e-mail or the forums – and yet others I was meeting for the first time.  Thanks also to Christophe and his team for putting together what one of our partners described to me on the plane home as “the best Project Conference ever!”  It was wonderful to see such an active partner expo area with some cool add-ons, solutions and services available to help our customers get the best out of the product.  In speaking to many attendees I know that the sessions from our customers were much appreciated – thanks to all who took the time to prepare and present these topics.  I enjoyed doing a couple of sessions with Adrian Jenkins where we walked though a few different scenarios and showed the tools we use to troubleshoot problems – and a fun part of the conference was a webcast with Dux Raymond Sy, Jennifer Mason, Christophe and David Milner.  This is out on YouTube on the Microsoft Project channel , along with plenty of other videos that you might find useful.  Lunchtime webcast from the Microsoft Project Conference 2012

Project Server 2010: Slow load times of PWA and SharePoint pages

Thanks to a couple of my European support colleagues for sharing this one, which I know could also affect many of our customers world-wide if they are running servers that are not internet connected.  Great work by Jorge Puig Altozano from our Project support team in Madrid, and special thanks (and all the credit – according to Jorge) to Hector Calvarro for the SharePoint team – also in Madrid.  If Spanish is your preferred language then read on at https://blogs.technet.com/b/elfarodeprojectserver/archive/2012/02/22/project-server-2010-elevados-tiempos-de-respuesta-al-cargar-paginas-de-sitios-pwa.aspx and also Hector’s blog at https://blogs.technet.com/b/hablamoss/ .  Although we are just talking about PWA and SharePoint here – consideration also needs to be given to other 3rd Party assemblies that may be installed too – and this could affect the loading of PDPs. On to the English description – translation thanks to Jorge, with some additional input from Catalin Olteanu from one of our partners, UMT , as they also experienced the same slow downs. We had a Project Server 2010 server, with no Internet connection, that was returning high response times when we would try to load any PWA page – slow response was seen to be due specifically to the calls to SecurityCheckUserPagePermisison, and CheckUserProjectPermissions.  We observed the information n the SharePoint Developer Dashboard, and decided to take a look at the Certificates behavior. BriSmith note – I’m sure lots of analysis went into this decision by Hector – and for anyone interested in understanding more about the problem Catalin found the lookup for www.download.windowsupdate.com from a netmon trace, and the event viewer showing a 4102, and a couple of 4107 CAPI2 errors helped join the dots… We disabled the timeouts for the certificates verification in the SharePoint server On Windows Server , this component is on by default and , whenever an application is presented with a certificate that is not present in the trusted root store, it will attempt to contact Microsoft download servers to get the latest root chain. The SharePoint OOB certificates can induce this as they are stored in a particular repository (SharePoint- Under Certificate management -Local Computer), as opposed to the trusted root. The decision not to have SharePoint code creating and installing a root cert in the Trusted Root store was taken for security reasons (ex if an application could install a certificate into the TRC store might compromise the security of the system). Can this behavior be avoided? ( ie. bypass this check for subsequent validations). Supported workarounds:     Disable automatic update of root certificates on SharePoint Servers          • Launch gpedit.msc as admin on the box          • Go to Computer Configuration –> Windows Settings -> Security settings -> Public Key Policies -> Certificate Path validation settings          • In Network retrieval tab -> Define the policy and uncheck “Automatically update certs from Microsoft root cert program”          • Run gpupdate /force for policy to take effect immediately. Additionally , the cert management plan needs to be implemented as per below article: Manage Certificate Path Validation: https://technet.microsoft.com/en-us/library/cc731638(WS.10).aspx • It is not unusual for enterprises to disable auto-root update. If they opt to do it, they will have to manage distribution of third-party roots that they need in their enterprise via group policy. • The customer  will want to monitor new releases (KB931125) quarterly and update their trust as required. Implications of disabling : There should be no specific implications to SharePoint since we are using self-signed certs and manage them ourselves . The SharePoint certs do have an expiry and we do have a health rule that watches for that IIRC and will warn the admin to update/re-roll them.  The main aspect to think through is for “other” certs used on the box (like SSL certs, certs to trust download packages or for SAFER policy etc etc) which are issues from certs chained to those in the TRC store. But note there is nothing “new” about these issues with this setting; since the boxes in question cannot access the Internet … they actually “require”  more hands on. We also got rid of the verifications for Code Access Security and some other certificates (Certificates Revocation List and Authenticode signatures) doing the following: We have to edit this file: C:WindowsMicrosoft.NETFramework64v2.0.50727CONFIGmachine.config And add/change the value:             The explanation for this key: This element was introduced in the .NET Framework version 3.5 and applies only to that version. It has no effect in later versions of the .NET Framework. The common language runtime (CLR) tries to verify the Authenticode signature at load time to create Publisher evidence for the assembly. However, by default, most applications do not need Publisher evidence. Standard CAS policy does not rely on the PublisherMembershipCondition. You should avoid the unnecessary startup cost associated with verifying the publisher signature unless your application executes on a computer with custom CAS policy, or is intending to satisfy demands for PublisherIdentityPermission in a partial-trust environment. (Demands for identity permissions always succeed in a full-trust environment.) https://msdn.microsoft.com/en-us/library/bb629393(v=vs.90).aspx If we don’t use code signed by Authenticode, and work with CLR validations, we can work with the mentioned option. This is a more detailed explanation about this: A little background – CAS is feature in .NET that allows you to have more granular control over what code can execute in your process.  Basically there are 3 parts: 1.Evidence – Information that a module/code presents to the runtime.  This can be where the module was loaded from, the hash of the binary, strong name, and importantly for this case the Authenticode signature that identifies a modules publisher. 2.Permissions Set – Group of Permissions to give code (Access to File System, Access to AD, Access to Registry) 3.Code Group – The evidence is used to provide membership in a code group.  Permission Sets are granted to a code group. So when a module loads it presents a bunch of evidence to the CLR and the CLR validates it.  One type of evidence is the “publisher” of the module.  This evidence is validated by looking at the Authenticode signature which involves a Certificate.  When validating the Certificate the OS walks the chain of Certificates and tries to download the Certificate Revocation List from a server on the internet.  This is where the slowdown occurs. A lot of servers do not have access to make calls out to internet.  It is either explicitly blocked, the server might be on a secure network, or a proxy server might require credentials to gain access to the internet.  If the DNS/network returns quickly with a failure the OS check will move on but if the DNS/network is slow or does not respond at all to the request we have to timeout.  This can occur for multiple modules because we create this evidence for each module that is loaded.  However if we have looked for a CRL and failed we will not recheck.  However different certificates have different CRLs.  For instance a VeriSign Certificate may have one CRL URL but a Microsoft Certificate will have a different one. Since this probe can slow things down it is best to just avoid the probe if you do not need it.  For .NET the only reason you would need it is if you are setting Code Access Security based on the module Publisher.  Because this can cause potential slow downs and you do not need to occur this penalty you can just disable the generation of the Publisher Evidence when your module is loaded.  To disable this use the Application configuration.  Just set the enabled property to false and you will avoid all of this. Now for ASP.NET applications it was not immediately obvious how to do this but it turns out that
you cannot add this to an applications Web.Config but you can add it to the ASPNET.CONFIG file in the Framework directory.  For other applications just add the attribute to the APP.CONFIG file. More information here: Site slowness due to SharePoint STS Certificate CRL checking https://support.microsoft.com/kb/2625048/

February 2012 Cumulative Update Announced for Project and Project Server 2010 and 2007

Take a look over at  https://blogs.technet.com/b/projectadministration/archive/2012/02/29/microsoft-project-server-and-sharepoint-server-2007-and-2010-february-2012-cu-announcement.aspx for the full details of the release, and thanks to Rob for pulling the details together and of course to the engineering team for all their hard work on getting things fixed!  There will be a slight delay with the SharePoint Server and the roll-up packages, due w/c March 5th 2012. As mentioned in the Admin blog please also sign up for the Webcast, and don’t forget to join early if you haven’t attended before and need to download the Live Meeting client software. TechNet Webcast: Information about Microsoft Project and Project Server February 2012 Software Update (Level 200) https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032493966&Culture=en-US Also looking forward to the Project Conference 2012 in Phoenix, March 19-22 – reminder, it isn’t too late – see Christophe’s recent post on all the great content you can expect – https://blogs.msdn.com/b/chrisfie/archive/2012/02/22/it-professionals-and-developers-content-at-project-conference-2012-mspc12.aspx !

Microsoft Project Conference 2012: What do you want to hear?

Myself and Adrian Jenkins are attending and presenting at the Project Conference 2012, March 19th to the 22nd in Phoenix Arizona and will be delivering a couple of the sessions.  The sessions are planned to be one about the February 2012 Cumulative Update for Project and Project Server, and the other one will be a guide to troubleshooting Project Server – looking at some of the tools we use in support to help identify issues.  But if there are some specific scenarios or tools that you are especially interested in then we would be delighted to consider these for inclusion in the sessions.  The conference is your chance to hear great things from our partners, customers and of course Microsoft – and here is your chance to let me and Adrian know exactly what you’d like to hear from us.  Looking forward to meeting friends old and new in Phoenix!

Project 2010: Events now raised by changes in Project Information dialog

This will be the first of a couple of postings about some changes in behavior that you might see once you install the December Cumulative updates .  This one is specifically about the client, and the Project Information dialog.  In the past if you changed a field value within the Project Information dialog then this would not raise the ProjectBeforeTaskChange or ProjectDeforeTaskChange2 events.  The values in Project Information relate to the project summary task (Task 0) and in Project 2007 these events would fire regardless of where the change was made.  Now, with the December CU these events are available to you.  However, there are a couple of things you need to be aware of: 1.  Firstly the event will fire once for the complete dialog, so unlike if you were changing values in the Project Summary task you may need to allow for and have your users prepared for multiple pop-ups (depending what you code does) once they click OK on the Project Information dialog. 2. If you cancel then you will lose all your changes – so make sure users are aware they may need to go back and check the values if for some reason your code rejected one of the changes.  For example if you popped up a dialog for each change and accepted a couple then rejected one the values that had been accepted get cancelled too. 3. There appears to be a bug which we are investigating whereby the Project Department field will always raise the event even if it has not been changed. I know that we didn’t have the issue with the Department field in 2007 – I will double check the behavior of the second bullet and see if that has also changed since 2007 – and if that should be considered a bug too. *** Update – looks like this wasn’t the behavior in 2007 – you could cancel any of the individual events and not roll back other changes – so I’d consider this a bug in 2010.  No promises on any fix dates though. One workaround to avoid cancelling if you thought the Department field had been changed would be to check if the value has actually changed – something like: If ((Field = FieldNameToFieldConstant(“Project Departments”)) And (NewValue = vOldValue)) Then Exit Function should help. *** Update – you may also see this same issue with the Notes field.