<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7130587409577087282</id><updated>2012-01-31T21:42:38.038+11:00</updated><category term='Noosa'/><category term='Excel 2010'/><category term='Visual Studio'/><category term='DotNet Runtime'/><category term='Performance'/><category term='China'/><category term='Crystal Reports 2008'/><category term='Remote Debugging'/><category term='MOSS 2007 Web Parts'/><category term='Office 2003'/><category term='Master Data Management'/><category term='ASP.NET'/><category term='SAP Vendor Creation'/><category term='EJB'/><category term='VPN'/><category term='Network Load Balancing'/><category term='Code Generation'/><category term='SAP'/><category term='Visual Studio 2008'/><category term='IE Compatibility'/><category term='SAP Microsoft Integration'/><category term='Logitech'/><category term='WS-RM'/><category term='TFS 2010 Licensing'/><category term='ORM'/><category term='VS 2008 RTM'/><category term='Dell'/><category term='ForeFront Identity Manager'/><category term='Laptop'/><category term='Oakton'/><category term='XSLT Debugging'/><category term='SSIS'/><category term='File Upload'/><category term='SharePoint Trial License'/><category term='Aspose'/><category term='IE Standalone'/><category term='Microsoft SAP Integration'/><category term='Virtual Machine'/><category term='QueryExtender'/><category term='Holidays'/><category term='SharePoint 2010 Branding'/><category term='Windows Vista'/><category term='MOSS 2007 Workflow'/><category term='Sharepoint 2007'/><category term='Nullable Types'/><category term='XSL'/><category term='Image Resizing'/><category term='CSS'/><category term='Visual Studio Web Tests'/><category term='Excel 2007'/><category term='Hosting Provider Rating'/><category term='Subversion'/><category term='Brisbane'/><category term='Unit Test'/><category term='Sharepoint 2007 Search'/><category term='Javascript'/><category term='ASP.NET Bugs'/><category term='OpenText'/><category term='SharePoint 2010 Business Connectivity Services'/><category term='SharePoint 2007 Workflow'/><category term='Network Card Problem'/><category term='Duet Enteprise'/><category term='SAP DMS'/><category term='Enabled Property'/><category term='XSL Debugging'/><category term='Tech.Ed 2008'/><category term='SharePoint Slow'/><category term='Gemini'/><category term='WSS'/><category term='TechEd'/><category term='InfoPath Versioing'/><category term='Vanuatu'/><category term='SAP Integration'/><category term='LiveMesh'/><category term='SAP Enterprise Services'/><category term='SAP BAPIs'/><category term='TFS 2010'/><category term='SSAS'/><category term='SSRS'/><category term='Outlook 2007'/><category term='Project Estimation'/><category term='SharePoint 2007 Object Model'/><category term='Microsoft Best Practice'/><category term='BCS Solutions'/><category term='Lend Lease'/><category term='Seam Carving'/><category term='Hosting Provider Review'/><category term='ASP.NET 3.5'/><category term='Entity Framework'/><category term='.NET'/><category term='Batch File'/><category term='Excel'/><category term='MSN Messenger'/><category term='Sorting'/><category term='Blog Formatting Tools'/><category term='Microsoft'/><category term='Fiddler Tool'/><category term='IIS 7'/><category term='MOSS 2007'/><category term='Top 10 Hosting Providers'/><category term='SharePoint Performance Issues'/><category term='Enabling Anonymous Access'/><category term='SharePoint SAP Integration'/><category term='Source Control'/><category term='SQL Server Integration Services'/><category term='Deployment'/><category term='DirectX 10'/><category term='Free Redistrbutable'/><category term='SharePoint Deployment'/><category term='Free SharePoint Tools'/><category term='System Integration'/><category term='IWorkflowTypeExtender'/><category term='Crysis'/><category term='Configuration Settings'/><category term='.NET Runtime 3.5'/><category term='ISP'/><category term='Access 2007'/><category term='Table Splitting'/><category term='Charts'/><category term='SharePoint Custom Master Pages'/><category term='SAP Netweaver'/><category term='PowerShell'/><category term='Gridview'/><category term='SharePoint 2007 Web Parts'/><category term='IXWebHosting'/><category term='LINQ to Objects'/><category term='SharePoint Deployment Issues'/><category term='IE 7'/><category term='Document Generation'/><category term='Entity Projection'/><category term='SharePoint Administration'/><category term='SharePoint 2007 Backup'/><category term='ReadyImage'/><category term='Game Optimization'/><category term='MDS'/><category term='Duet Enterprise for Microsoft SharePoint and SAP'/><category term='Windows Azure Appliance'/><category term='Scalability'/><category term='SQL Server 2008'/><category term='Araxis Merge'/><category term='Cloud Computing'/><category term='Outlook 2010'/><category term='Branching'/><category term='Microsoft Virtual Earth'/><category term='Entity Framework 2011 Feature Pack'/><category term='jQuery Mobile'/><category term='Project'/><category term='Best practices'/><category term='Office 2010'/><category term='Reporting Services'/><category term='Team Foundation Server 2008'/><category term='First Words'/><category term='SharePoint 2010 Best Practices'/><category term='Anonymous Types'/><category term='Javascript Errors'/><category term='3rd Party Applications and Utilities'/><category term='VPC'/><category term='Lookup Screens'/><category term='SharePoint Forms Services'/><category term='Reflection'/><category term='Entity Framework 4.5'/><category term='MOSS Web Service'/><category term='SQL Server Reporting Services'/><category term='ASP.NET Profile Provider'/><category term='Active Directory'/><category term='Fake SanDisk'/><category term='Databinding'/><category term='Biztalk'/><category term='ABAP'/><category term='Sharepoint'/><category term='Control Inheritance'/><category term='SQL Aliases'/><category term='Legacy ERP Systems'/><category term='Hardware'/><category term='Windows Tweaks'/><category term='Reverse Engineering'/><category term='SQL Server 2008 R2'/><category term='Silverlight'/><category term='Windows Communication Foundation'/><category term='ASP.NET 2.0'/><category term='Mapping'/><category term='UWL'/><category term='BCS'/><category term='Visual Studio Load Tests'/><category term='SAP GUI'/><category term='Regular Expressions'/><category term='Windows Workflow Foundation'/><category term='Content Types'/><category term='TOGAF 9.1'/><category term='IX Web Hosting'/><category term='Windows Server 2008'/><category term='ClickOnce'/><category term='UAT'/><category term='C# Tips and Tricks'/><category term='Biztalk 2009'/><category term='SharePoint 2007 Configuration Troubleshooting'/><category term='ASP.NET SQL Authentication Provider'/><category term='TFS Email Alerts'/><category term='Scripting'/><category term='Fake SDHC'/><category term='TOGAF 9'/><category term='ASP.NET MVC 4'/><category term='Live ID'/><category term='SharePoint Best Practices'/><category term='Travel'/><category term='InfoPath 2007'/><category term='XPS 1730'/><category term='Performance Profiling'/><category term='SQL 2008 R2'/><category term='SSIS 2008'/><category term='Business Connectivity Services'/><category term='Windows Service'/><category term='Netweaver Developer Studio'/><category term='Grid Controls'/><category term='LINQDataSource'/><category term='SharePoint Troubleshooting'/><category term='LINQ'/><category term='jQuery'/><category term='Master Data Services'/><category term='Project Management'/><category term='XSLT'/><category term='Custom Extraction Rule'/><category term='SAP MOSS Integration'/><category term='VHD'/><category term='Pickers'/><category term='SAP SharePoint Integration'/><category term='G15 Gaming Keyboard'/><category term='Sharpoint Designer 2007'/><category term='UML Modelling'/><category term='XML'/><category term='.NET Framework'/><category term='Universal Worklist'/><category term='SharePoint 2010'/><category term='ASP.NET MVC 3'/><category term='svnmerge'/><category term='TOGAF Certification'/><category term='Data Migration'/><category term='IE 6'/><category term='LDAP'/><category term='Templates'/><category term='Entity Framework 4'/><category term='IT Career Tips'/><category term='Check In Policy'/><category term='IT Disasters'/><category term='SharePoint 2007 Web Services'/><category term='SharePoint Designer 2010'/><category term='Telerik'/><category term='XPath'/><category term='Factory Pattern'/><category term='SharePoint Designer'/><category term='InfoPath Forms Services'/><category term='Web Client Software Factory'/><category term='TortoiseSVN'/><category term='LINQ 2 SQL'/><category term='ASP.NET MVC 2'/><category term='SQL Server Reporting Services 2008'/><category term='Gzip'/><category term='Impersonation'/><category term='ABA'/><category term='Google Maps'/><category term='System.Data.SqlClient.SqlException'/><category term='SQL 2008'/><category term='Web.Config Transforms'/><category term='Bamboo Solutions'/><category term='SQL Server'/><category term='Naked DSL'/><category term='Auditing'/><category term='MCP'/><category term='AJAX'/><category term='SPFile'/><category term='CodeSmith'/><category term='Aspose.Words'/><category term='Zach William Klein'/><category term='Content Aware'/><category term='Network Administration'/><category term='Browser Freezing'/><category term='AutoCompleteExtender'/><category term='Internet Explorer Slow'/><category term='Visual Studio 2010'/><category term='New Baby'/><category term='Cheap Web Hosting'/><category term='VSTO'/><category term='SAP Web Services'/><category term='Windows Workflow'/><category term='.ABA File Format'/><category term='Estimation'/><category term='Control Iteration'/><category term='Web Parts'/><category term='SQL Azure'/><category term='SAP KM'/><category term='Windows Azure'/><category term='Office 2007'/><category term='Windows 2008'/><category term='First Day'/><category term='SharePoint 2007 SDK'/><category term='Duet Enterprise'/><category term='Dirty Check'/><category term='Design Patterns'/><category term='Report Viewer'/><category term='TFS Remote Portal'/><category term='DataSources'/><category term='SAP MOSS Interoperability'/><category term='Pizza'/><category term='SSIS Object Model'/><category term='MDM'/><category term='TFS'/><category term='SharePoint Search'/><category term='PerformancePoint'/><category term='Inline Editing'/><category term='Interactive Seam Carving Demo'/><category term='YouTube'/><category term='Induction'/><category term='CAML'/><category term='Generics'/><category term='Java'/><category term='SPUser'/><category term='Heidi'/><category term='UltraEdit'/><category term='TFS 2008'/><category term='HTTP 400 Bad Request'/><category term='Microsoft Azure'/><category term='Function Keys'/><category term='SharePoint 2007 Application Pages'/><category term='Windows Live Messenger'/><category term='Visual Studio Tools For Office'/><category term='WCF'/><category term='Web DynPro Java'/><category term='Queries'/><category term='Charting Controls'/><category term='SharePoitn 2010'/><category term='SonicWall'/><category term='InfoPath Browser Based Forms'/><category term='eTax'/><title type='text'>David Klein's Corner</title><subtitle type='html'>The Musings and Findings of Software Consultant David Klein (Sydney, Australia)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default?start-index=101&amp;max-results=100'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>293</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6947345898485179317</id><published>2012-01-20T16:39:00.002+11:00</published><updated>2012-01-20T16:57:50.372+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TOGAF Certification'/><category scheme='http://www.blogger.com/atom/ns#' term='TOGAF 9'/><category scheme='http://www.blogger.com/atom/ns#' term='TOGAF 9.1'/><title type='text'>Just passed the TOGAF 9 Certified Exam (Level 1 and 2) with 90% pass mark!</title><content type='html'>Just passed the &lt;strong&gt;TOGAF 9 Level 1 and 2 Combined exam &lt;/strong&gt;with a pass mark of 90/100.&amp;nbsp;Part 2 was particularly difficult as expected and really tests your knowledge well. In particular, it tested my knowledge of the different architecture viewpoints that are tailored to match stakeholder concerns. &lt;br /&gt;&lt;br /&gt;I won't give too much away (lest I violate the non-disclosure agreement) - but the official Study Guide for Part 2&amp;nbsp; (&lt;a href="https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=b096"&gt;https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=b096&lt;/a&gt;) absolutely has to be known &lt;strong&gt;back-to-front&lt;/strong&gt; to be able to answer the Part 2 questions. It contains content that isn't obvious from the publicly-available TOGAF 9.1 document (&lt;a href="http://pubs.opengroup.org/architecture/togaf9-doc/arch/"&gt;http://pubs.opengroup.org/architecture/togaf9-doc/arch/&lt;/a&gt;)&lt;br /&gt;I was a bit worried going into the exam as I had just discovered one of my colleagues failed the TOGAF 8 bridging exam. Luckily I survived the gauntlet (with&amp;nbsp;several late nights of study) and made it through.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6947345898485179317?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6947345898485179317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6947345898485179317' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6947345898485179317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6947345898485179317'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2012/01/just-passed-togaf-9-certified-level-1.html' title='Just passed the TOGAF 9 Certified Exam (Level 1 and 2) with 90% pass mark!'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2427007486268779419</id><published>2012-01-10T14:00:00.000+11:00</published><updated>2012-01-10T14:00:58.773+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SonicWall'/><title type='text'>SonicWall VPN - "The peer does not allow saving of username and password" - How to Automatically Log in without entering username and pass every time</title><content type='html'>There is a server-side flag in the SonicWall Firewall Administration Tool which prevents you from saving your username and password. By default this is on - and if you go to the settings for your VPN connection, you cannot put them in. The text boxes are disabled, and you are shown the following&amp;nbsp;message:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;The peer does not allow saving of username and password&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If your connection is poor, you will have to enter your username and password in several times a day - and this can be very frustrating. To work around this, you can use the following commandline for your SonicWall Global VPN Client if you don't want to enter the username and password every time you log into your VPN:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"C:\Program Files\SonicWALL\SonicWALL Global VPN Client\SWGVC.exe"/e "&lt;em&gt;VPNName&lt;/em&gt;" /u "&lt;em&gt;username&lt;/em&gt;" /p "&lt;/strong&gt;&lt;a href="mailto:smeghead@6"&gt;&lt;strong&gt;password&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;"&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;WARNING:&lt;/span&gt;&lt;/strong&gt; note that if you save this to a batch file, it will not be encrypted - &lt;strong&gt;and so your system is inherently less secure if your machine gets stolen. &lt;/strong&gt;Naturally, that's the main reason the "save username and password"&amp;nbsp;functionality is disabled by default for all users. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2427007486268779419?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2427007486268779419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2427007486268779419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2427007486268779419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2427007486268779419'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2012/01/sonicwall-vpn-peer-does-not-allow.html' title='SonicWall VPN - &quot;The peer does not allow saving of username and password&quot; - How to Automatically Log in without entering username and pass every time'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8153226796376756407</id><published>2011-12-23T22:52:00.000+11:00</published><updated>2011-12-23T22:52:13.719+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 4'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>My ASP.NET MVC Page (using Forms Authentication) is not Rendering CSS and Javascript on the Login View - All Requests Show as Redirects to the Login Controller Action in Fiddler</title><content type='html'>I recently tried to deploy an ASP.NET MVC 4 mobile application (using jQuery Mobile 1.0) to one of the Oakton Amazon Web Services (AWS) web servers. This application used Forms Authentication.&lt;br /&gt;&lt;br /&gt;I span up a completely new instance of Windows Server 2008 R2, restored a backup database and xcopy deployed the new application to a newly created Virtual Directory. I ran the Microsoft &lt;strong&gt;Web Platform Installer &lt;/strong&gt;to get the latest MVC framework and supporting&amp;nbsp;components. &amp;nbsp;I enabled Forms And Anonymous Authentication on that IIS 7 Site and made sure that All users can access the CSS files even before&amp;nbsp;logging in with the following entries in the web.config file:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;location path="Content"&amp;gt;&lt;br /&gt;            &amp;lt;system.web&amp;gt;&lt;br /&gt;                  &amp;lt;authorization&amp;gt;&lt;br /&gt;                        &amp;lt;allow users="*" /&amp;gt;&lt;br /&gt;                  &amp;lt;/authorization&amp;gt;&lt;br /&gt;            &amp;lt;/system.web&amp;gt;&lt;br /&gt;      &amp;lt;/location&amp;gt;&lt;br /&gt;      &amp;lt;location path="Styles"&amp;gt;&lt;br /&gt;            &amp;lt;system.web&amp;gt;&lt;br /&gt;                  &amp;lt;authorization&amp;gt;&lt;br /&gt;                        &amp;lt;allow users="*" /&amp;gt;&lt;br /&gt;                  &amp;lt;/authorization&amp;gt;&lt;br /&gt;            &amp;lt;/system.web&amp;gt;&lt;br /&gt;      &amp;lt;/location&amp;gt;&lt;br /&gt;      &amp;lt;location path="Scripts"&amp;gt;&lt;br /&gt;            &amp;lt;system.web&amp;gt;&lt;br /&gt;                  &amp;lt;authorization&amp;gt;&lt;br /&gt;                        &amp;lt;allow users="*" /&amp;gt;&lt;br /&gt;                  &amp;lt;/authorization&amp;gt;&lt;br /&gt;            &amp;lt;/system.web&amp;gt;&lt;br /&gt;      &amp;lt;/location&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;However, when hitting this server, the login screen just wouldn't render correctly. Looking at the requests showing up in Fiddler - it seemed that even the CSS and javascript files were being redirected to the login page. Some of my colleagues had a look - but were also stumped. All the permissions looked right!&lt;br /&gt;&lt;br /&gt;While the application pool user had the correct permissions, the problem was that Anonymous users (i.e. everyone before login) were not running as the Application pool user - they were still running as the default which is IUSR.&lt;strong&gt; I simply edited the Anonymous authentication credentials setting in IIS 7 to use the Application Pool Credentials rather than IUSR.&lt;/strong&gt; Alternatively, I could have given the IUSR_&lt;em&gt;MachineName &lt;/em&gt;user permissions on the required supporting directories to fix the problem.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-hbBmwKC2ulk/TvRoMyGEzLI/AAAAAAAAAps/ISy__Zr0QWU/s1600/AuthenticationIssue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://2.bp.blogspot.com/-hbBmwKC2ulk/TvRoMyGEzLI/AAAAAAAAAps/ISy__Zr0QWU/s400/AuthenticationIssue.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This resolved the problem - and CSS and jQuery were again accessible for all users (including anonymous ones). As usual this seems pretty obvious in hindsight - but the mad rush to get the whole environment running and to deploy the application meant that this critical link was missed.&lt;br /&gt;&lt;br /&gt;Let this be a reminder.&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8153226796376756407?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8153226796376756407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8153226796376756407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8153226796376756407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8153226796376756407'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/12/my-aspnet-mvc-page-using-forms.html' title='My ASP.NET MVC Page (using Forms Authentication) is not Rendering CSS and Javascript on the Login View - All Requests Show as Redirects to the Login Controller Action in Fiddler'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-hbBmwKC2ulk/TvRoMyGEzLI/AAAAAAAAAps/ISy__Zr0QWU/s72-c/AuthenticationIssue.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5644734354988280141</id><published>2011-12-16T11:43:00.001+11:00</published><updated>2011-12-16T11:44:58.083+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS Email Alerts'/><category scheme='http://www.blogger.com/atom/ns#' term='Check In Policy'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><title type='text'>TFS 2010 - How do I create email alerts when anything is checked into TFS, Build's Fail/Succeed or Work Items are Assigned/Changed?</title><content type='html'>This is quite simple to do with the right tools installed on your development machine:&lt;br /&gt;&lt;br /&gt;1) Ensure that you have an SMTP Server Configured for your TFS box - as described on MSDN at &lt;a href="http://msdn.microsoft.com/en-us/library/ms400808(v=vs.80).aspx"&gt;"How to: Configure SMTP Server and E-mail Notification Settings in the Services Web.Config File"&lt;/a&gt;&amp;nbsp; &lt;br /&gt;2) Install the &lt;strong&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f"&gt;Visual Studio 2010 Team Foundation Server Power Tools&lt;/a&gt;&lt;/strong&gt; from MSDN &lt;br /&gt;3) Open up the &lt;strong&gt;Alert Explorer &lt;/strong&gt;which installs a set of alert actions. The alert explorer is accessible from several different menus within Visual Studio 2010. See screenshots below:&lt;br /&gt;&lt;br /&gt;From the &lt;b&gt;Team Menu&lt;/b&gt;:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-HukWZKJecBo/TuqRxPpo9vI/AAAAAAAAAoc/N5ZY3ZwSu8Y/s1600/TFSAlertsExplorer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-HukWZKJecBo/TuqRxPpo9vI/AAAAAAAAAoc/N5ZY3ZwSu8Y/s320/TFSAlertsExplorer.png" width="278" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;On TFS Work Items:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-73lAjeboxyI/TuqR4KBsTAI/AAAAAAAAAok/lvY8IdpkYms/s1600/TFS_WorkItemAlerts.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://2.bp.blogspot.com/-73lAjeboxyI/TuqR4KBsTAI/AAAAAAAAAok/lvY8IdpkYms/s320/TFS_WorkItemAlerts.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;From the top level TFS Server Node:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-IH1iUXTwQws/TuqSOedvMjI/AAAAAAAAAos/YUGNw5cfCa0/s1600/TFS_Explorer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://4.bp.blogspot.com/-IH1iUXTwQws/TuqSOedvMjI/AAAAAAAAAos/YUGNw5cfCa0/s320/TFS_Explorer.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;On Branches or Folders within the TFS Source Control Explorer windows:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6XWEreVmw58/TuqShHWUaBI/AAAAAAAAAo8/3NlaKkwNAQA/s1600/TFS_SourceCodeFoldersOrBranches.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-6XWEreVmw58/TuqShHWUaBI/AAAAAAAAAo8/3NlaKkwNAQA/s320/TFS_SourceCodeFoldersOrBranches.png" width="293" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;There are several predefined alerts that come with the Visual Studio TFS Power Tools. These are shown below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hcgrV0sgNF4/TuqTx9855oI/AAAAAAAAApM/wQdevTQX3ME/s1600/TFS_AvailableAlertTypes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-hcgrV0sgNF4/TuqTx9855oI/AAAAAAAAApM/wQdevTQX3ME/s640/TFS_AvailableAlertTypes.png" width="492" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The alert filters are quite flexible.&amp;nbsp;You can modify and change these Alerts in the alter definition editor as shown below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-unX8Dp6vsHk/TuqT9qFoD4I/AAAAAAAAApU/3uaA2SaquZA/s1600/AlertsExplorerEditor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="488" src="http://4.bp.blogspot.com/-unX8Dp6vsHk/TuqT9qFoD4I/AAAAAAAAApU/3uaA2SaquZA/s640/AlertsExplorerEditor.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5644734354988280141?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5644734354988280141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5644734354988280141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5644734354988280141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5644734354988280141'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/12/tfs-2010-how-do-i-create-email-alerts.html' title='TFS 2010 - How do I create email alerts when anything is checked into TFS, Build&apos;s Fail/Succeed or Work Items are Assigned/Changed?'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-HukWZKJecBo/TuqRxPpo9vI/AAAAAAAAAoc/N5ZY3ZwSu8Y/s72-c/TFSAlertsExplorer.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2802324207310128440</id><published>2011-12-05T12:17:00.002+11:00</published><updated>2011-12-05T12:23:15.469+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='MDS'/><title type='text'>SQL Master Data Services (MDS) - How to I retrieve the connection string from Microsoft.MasterDataServices.Workflow.Properties.Settings?  - it is not available via ConfigurationManager.AppSettings or ConfigurationManager.ConnectionStrings</title><content type='html'>A question today from one of my Colleagues surrounded the retrieval of a value from an app.config file used by a &lt;strong&gt;&lt;em&gt;Master Data Services Workflow Extender&lt;/em&gt;&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;Master Data Services (MDS) workflow extenders support the creation of Business Logic (amongst other things such as external WCF Service calls) against data changes in the Master Data Services catalogs. These workflow extenders run in the context of the SQL Server Master Data Services&amp;nbsp;executable (Microsoft.MasterDataServices.Workflow.exe) - and consequently rely upon the app config file named Microsoft.MasterDataServices.Workflow.exe.&lt;strong&gt;config&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately, it doesn't appear as though the MDS System Settings classes give you access to that connection string either (&lt;a href="http://msdn.microsoft.com/en-us/library/ff487028.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff487028.aspx&lt;/a&gt;). Consequently, you have to default to basic .NET functionality for handling configuration sections.&lt;br /&gt;&lt;br /&gt;The&amp;nbsp;traditional &lt;strong&gt;appSettings&lt;/strong&gt; section of the Microsoft.MasterDataServices.Workflow.exe.config file is not used by MDS - it actually uses&amp;nbsp;an &lt;strong&gt;applicationSettings &lt;/strong&gt;section of the file that is not accessible by the usual ConfigurationManager.AppSettings and ConfigurationManager.ConnectionStrings nodes in the config file.&amp;nbsp;Specifically, it uses a &lt;strong&gt;custom System.Configuration.ApplicationSettingsGroup &lt;/strong&gt;of type &lt;strong&gt;System.Configuration.ClientSettingsSection. &amp;nbsp; &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eiWbI6ZOWG4/Ttwa4C7T-LI/AAAAAAAAAoU/9At_BGyU7a4/s1600/AppSettingsvsApplicationSettings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://2.bp.blogspot.com/-eiWbI6ZOWG4/Ttwa4C7T-LI/AAAAAAAAAoU/9At_BGyU7a4/s400/AppSettingsvsApplicationSettings.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To consume this section, you can use the following method (GetSettingValueFromAppConfig):&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;using System.Configuration;&lt;br /&gt;using Microsoft.VisualStudio.TestTools.UnitTesting;&lt;br /&gt;&lt;br /&gt;namespace CompanyName.MasterDataWorkflow.Tests&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Summary description for GetConnectionSettingsTest&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    [TestClass]&lt;br /&gt;    public class GetConnectionSettingsTest&lt;br /&gt;    {&lt;br /&gt;        public GetConnectionSettingsTest()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [TestMethod]&lt;br /&gt;        public void TestGetConnectionSettings()&lt;br /&gt;        {&lt;br /&gt;            //Should return the value from the local applicationSettings Node.&lt;br /&gt;            //Fully qualified section name&lt;br /&gt;            const string sectionName = "applicationSettings/Microsoft.MasterDataServices.Workflow.Properties.Settings";&lt;br /&gt;            const string settingName = "ConnectionString";&lt;br /&gt;&lt;br /&gt;            Assert.AreEqual(&lt;br /&gt;                GetSettingValueFromAppConfig(settingName,sectionName),&lt;br /&gt;                "Server=.;Database=MasterDataServices;Integrated Security=SSPI") ;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private string GetSettingValueFromAppConfig(string settingName, string sectionName)&lt;br /&gt;        {&lt;br /&gt;            System.Configuration.ClientSettingsSection section =&lt;br /&gt;               (System.Configuration.ClientSettingsSection)&lt;br /&gt;                System.Configuration.ConfigurationManager.GetSection(sectionName);&lt;br /&gt;            foreach (SettingElement setting in section.Settings)&lt;br /&gt;            {&lt;br /&gt;                string value = setting.Value.ValueXml.InnerText;&lt;br /&gt;                string name = setting.Name;&lt;br /&gt;                if (name.ToLower().StartsWith(settingName.ToLower()))&lt;br /&gt;                {&lt;br /&gt;                    return value;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return string.Empty;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2802324207310128440?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2802324207310128440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2802324207310128440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2802324207310128440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2802324207310128440'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/12/sql-master-data-services-mds-how-to-i.html' title='SQL Master Data Services (MDS) - How to I retrieve the connection string from Microsoft.MasterDataServices.Workflow.Properties.Settings?  - it is not available via ConfigurationManager.AppSettings or ConfigurationManager.ConnectionStrings'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-eiWbI6ZOWG4/Ttwa4C7T-LI/AAAAAAAAAoU/9At_BGyU7a4/s72-c/AppSettingsvsApplicationSettings.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2143064737039324552</id><published>2011-12-01T18:30:00.004+11:00</published><updated>2011-12-01T18:46:49.126+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XSL Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT Debugging'/><category scheme='http://www.blogger.com/atom/ns#' term='XSL'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>SharePoint 2010 - How to Get XML Sample Data for Debugging Web Parts that support XSL transform customization (e.g. Search and Content Query Web Parts)</title><content type='html'>XSLT is the preferred technology for customizing the visual output of SharePoint Web parts (primarily as it is standards-based and non-proprietary).&amp;nbsp;However, there is absolutely no XSLT debugging support provided within the SharePoint environment (this is surprising as it is so pervasive). With these limitations in mind, XSLT should ideally be developed outside of SharePoint in a proper IDE that supports XSL debugging such as Visual Studio 2010 or Altova's XMLSpy.&lt;br /&gt;&lt;br /&gt;However, debugging XSLT requires a data source (in the form of XML sample data) as input to the XSL transform. The simplest way to get a sample input XML file provided by SharePoint for a XSL-enabled web part is to do the following:&lt;br /&gt;&lt;br /&gt;1) Open up the web part in Edit Mode in SharePoint and replace the XML with the following stylesheet:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;&lt;br /&gt;&amp;lt;xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/&amp;gt;&lt;br /&gt;&amp;lt;xsl:template match="/"&amp;gt;&lt;br /&gt;&amp;lt;xsl:copy-of select="*"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2) View Source on the page and locate the block of XML that has been output by your web part. &lt;br /&gt;&lt;br /&gt;3) Save it as a text file and use it as input into your favourite XSL development tool.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2143064737039324552?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2143064737039324552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2143064737039324552' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2143064737039324552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2143064737039324552'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/12/sharepoint-2010-how-to-easily-get-input.html' title='SharePoint 2010 - How to Get XML Sample Data for Debugging Web Parts that support XSL transform customization (e.g. Search and Content Query Web Parts)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3797590476065394828</id><published>2011-12-01T18:15:00.008+11:00</published><updated>2011-12-02T11:25:05.045+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Parts'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>SharePoint 2010 - Modifying the Core Search Results Web Part to Display Results Sorted by Site Name or Document Title (With Paging Limitations...)</title><content type='html'>I recently had a requirement from my client to have the following functionality in SharePoint 2010:&lt;br /&gt;a) The Search Core Results web part displaying sorted in Alpha order&lt;br /&gt;b) The Search Core results part should just show sites (not documents) that the current user has access to.&lt;br /&gt;&lt;br /&gt;Requirement&amp;nbsp;b) was simple - you can set the keywords on the Core Search Web Part to just display sites (using the "&lt;strong&gt;contentclass:STS_Site&lt;/strong&gt;" keyword in the "Fixed Keyword Query" property - and the part would default to showing a list of sites the current user has access to (via the normal SharePoint 2010 security trimming functionality).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zzzImWVH1xE/TtchohXAlLI/AAAAAAAAAn0/tL_tTf3Ah5M/s1600/ContentClassSTS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="383" src="http://4.bp.blogspot.com/-zzzImWVH1xE/TtchohXAlLI/AAAAAAAAAn0/tL_tTf3Ah5M/s400/ContentClassSTS.png" width="286" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;However, the first requirement was a little bit trickier. The default Core Search Web part only provides for 2 search sort options - by date and by relevance (which is the default). &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-uKJ6oT1_Ws0/TtcmmFZDS2I/AAAAAAAAAn8/5kE7WSyTJvU/s1600/EnableSearch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-uKJ6oT1_Ws0/TtcmmFZDS2I/AAAAAAAAAn8/5kE7WSyTJvU/s400/EnableSearch.png" width="225" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To fix this, the XSLT which defines the search results needs to be changed. This XSLT is specific to the instance of the web part - modifying it won't affect the normal search functionality of your site.&lt;br /&gt;&lt;br /&gt;To modify the XSLT for the search results web part, you need to first uncheck the "&lt;strong&gt;Use Location Visualization&lt;/strong&gt;" checkbox. The XSLT that opens is around 700 lines long and has a lot of different XSL templates defined within it. To sort the search results by alpha order, you need to use an xsl-sort call within the main apply-templates call. &lt;br /&gt;&lt;br /&gt;Some sites such as &lt;a href="http://kwizcom.blogspot.com/2008/11/how-to-change-moss-search-retults-sort.html"&gt;http://kwizcom.blogspot.com/2008/11/how-to-change-moss-search-retults-sort.html&lt;/a&gt;&amp;nbsp;have a simple suggestion - but this would not work as the "select node is missing" on the "apply-templates directive. You need to provide a valid parent to allow for sorting. The fix was to change the empty apply-templates node in the default search XSL:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;xsl:apply-templates /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to the following:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;xsl:apply-templates select="All_Results/Result"&amp;gt;&lt;br /&gt;    &amp;lt;!-- The xsl-sort needs operate upon a single field - it doesn't work if the sort has to evaluate child nodes--&amp;gt; &lt;br /&gt;    &amp;lt;xsl:sort select="title" /&amp;gt;&lt;br /&gt;   &amp;lt;/xsl:apply-templates&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that I didn't require the other elements in the Search XML (the TotalResults and the NumberOfResults nodes), so this solution may not work in your scenario. This list can then act as a facility for cross-site collection navigation (which is not available out of the box in SharePoint 2010)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nrDl4tt2H6Q/TtcpWHZoPwI/AAAAAAAAAoM/BlyufG2xL3c/s1600/SitesInAlpha.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://3.bp.blogspot.com/-nrDl4tt2H6Q/TtcpWHZoPwI/AAAAAAAAAoM/BlyufG2xL3c/s320/SitesInAlpha.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Another limitation of this approach is that it will only work on a non-paged resultset - which is a pretty major limitation! In our scenario (for Phase 1 of our provisioning solution), it was acceptable for our customer&amp;nbsp;to increase the page size to avoid any pagination from occurring. Your mileage may vary.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;Other solution options are:&lt;/strong&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Scripting - Using jQuery to do a search call and sorting and paging the results yourself&lt;/li&gt;&lt;li&gt;Server side - with your own custom web part that also does the paging for you - using the SPGridView or inheriting from &lt;br /&gt;&lt;pre style="background: white; color: black; font-family: Consolas;"&gt;Microsoft.Office.Server.Search.WebControls.&lt;span style="color: #2b91af;"&gt;CoreResultsWebPart&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;Phase 2 of our project will use a combination of Server Side customization (as described at &lt;a href="http://msdn.microsoft.com/en-us/gg620579"&gt;http://msdn.microsoft.com/en-us/gg620579&lt;/a&gt;) by extending the CoreResultsWebPart &lt;br /&gt;&amp;nbsp;and the jQuery approach above for easy inline searching of accessible site collections.&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3797590476065394828?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3797590476065394828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3797590476065394828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3797590476065394828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3797590476065394828'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/12/sharepoint-2010-modifying-core-search.html' title='SharePoint 2010 - Modifying the Core Search Results Web Part to Display Results Sorted by Site Name or Document Title (With Paging Limitations...)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-zzzImWVH1xE/TtchohXAlLI/AAAAAAAAAn0/tL_tTf3Ah5M/s72-c/ContentClassSTS.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3548700235322675603</id><published>2011-11-09T17:35:00.003+11:00</published><updated>2011-11-09T17:51:47.376+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Charting Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET 3.5'/><title type='text'>Error executing child request for ChartImg.axd when Rendering a Custom Charting WebPart in SharePoint 2010</title><content type='html'>&lt;span style="color: black;"&gt;&lt;/span&gt;&amp;nbsp;I deployed a custom SharePoint 2010 web part today that uses the Microsoft Chart Controls For ASP.NET 3.5. However, after deployment, I began receiving the following exception when it rendered within an IIS 7 Hosted site (SharePoint 2010 running Windows 7)&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Error executing child request for ChartImg.axd &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I already had the handler entries set up the same as seen in the code samples. The main problem is that most web.config examples and the official samples don't include the required web.config entries for the ChartImg.axd httphandler (so that they operate correctly in IIS 7 and above). &lt;br /&gt;&lt;br /&gt;Windows 7 and Windows Server 2008 use IIS 7 so using the httpHandlers section won’t work like it does in previous versions of IIS – you must instead add an item to the handlers config section of the system.webserver node, like so:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;system.webServer&amp;gt;&lt;br /&gt;    &amp;lt;handlers&amp;gt;&lt;br /&gt;      &amp;lt;add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&amp;gt;&lt;br /&gt;    &amp;lt;/handlers&amp;gt;&lt;br /&gt;  &amp;lt;/system.webServer&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You should also make sure that you are using the POST value in the verb attribute like so:&lt;br /&gt;&lt;br /&gt;verb="GET,HEAD,&lt;strong&gt;POST&lt;/strong&gt;". &lt;br /&gt;&lt;br /&gt;Once your web application is configured correctly, you should now be able to go to http://SITENAME:PORTNUMBER/Charting.axd and receive a blank screen without any errors. This shows that the charting httphandler is now operational.&lt;br /&gt;&lt;br /&gt;Full example of web.config with correct Chart handler entries:&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;  &amp;lt;appSettings&amp;gt;&lt;br /&gt;    &amp;lt;add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" /&amp;gt;&lt;br /&gt;  &amp;lt;/appSettings&amp;gt;&lt;br /&gt;  &amp;lt;connectionStrings/&amp;gt;&lt;br /&gt;  &amp;lt;system.web&amp;gt;&lt;br /&gt;    &amp;lt;pages&amp;gt;&lt;br /&gt;      &amp;lt;controls&amp;gt;&lt;br /&gt;        &amp;lt;add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting"&lt;br /&gt;        assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&amp;gt;&lt;br /&gt;      &amp;lt;/controls&amp;gt;&lt;br /&gt;    &amp;lt;/pages&amp;gt;&lt;br /&gt;    &amp;lt;compilation debug="true"&amp;gt;&lt;br /&gt;      &amp;lt;assemblies&amp;gt;&lt;br /&gt;        &amp;lt;add assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/&amp;gt;&lt;br /&gt;        &amp;lt;add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/&amp;gt;&lt;br /&gt;      &amp;lt;/assemblies&amp;gt;&lt;br /&gt;    &amp;lt;/compilation&amp;gt;&lt;br /&gt;    &amp;lt;httpHandlers&amp;gt;&lt;br /&gt;      &amp;lt;add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/&amp;gt;&lt;br /&gt;    &amp;lt;/httpHandlers&amp;gt;&lt;br /&gt;  &amp;lt;/system.web&amp;gt;&lt;br /&gt;  &amp;lt;system.webServer&amp;gt;&lt;br /&gt;    &amp;lt;handlers&amp;gt;&lt;br /&gt;      &amp;lt;add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /&amp;gt;&lt;br /&gt;    &amp;lt;/handlers&amp;gt;&lt;br /&gt;  &amp;lt;/system.webServer&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3548700235322675603?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3548700235322675603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3548700235322675603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3548700235322675603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3548700235322675603'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/11/error-executing-child-request-for.html' title='Error executing child request for ChartImg.axd when Rendering a Custom Charting WebPart in SharePoint 2010'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3618652041832703531</id><published>2011-11-01T16:15:00.003+11:00</published><updated>2011-11-01T16:19:40.091+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Charts'/><title type='text'>FIX - I'm using the ASP.NET 3.5 Charting Controls in SharePoint 2010 to render charts - but the charts don't print out in Internet Explorer (they're fine in Firefox). Why?</title><content type='html'>Internet Explorer seems to have to re-download the images generated by the charting control when printing them - if the Chart Image Handler (&lt;strong&gt;&lt;em&gt;ChartImg.axd&lt;/em&gt;&lt;/strong&gt;) setting is at &lt;strong&gt;deleteAfterServicing=true, &lt;/strong&gt;then the&amp;nbsp;subsequent request to render the chart with that same&amp;nbsp;GUID&amp;nbsp;(for printing) will fail.&lt;br /&gt;&lt;br /&gt;To resolve, you can change the setting on your web.config&amp;nbsp;for&amp;nbsp;"&lt;span style="color: red;"&gt;deleteAfterServicing&lt;/span&gt;" to false so it doesn't automatically remove the requested image each run.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;lt;add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\inetpub\YourApplicationName\temp\;&lt;span style="color: red;"&gt;deleteAfterServicing=false&lt;/span&gt;"&amp;gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It is also best to have a cleanup job on this directory depending on your space requirements and number of chart requests made to your site.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3618652041832703531?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3618652041832703531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3618652041832703531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3618652041832703531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3618652041832703531'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/11/fix-im-using-aspnet-35-charting.html' title='FIX - I&apos;m using the ASP.NET 3.5 Charting Controls in SharePoint 2010 to render charts - but the charts don&apos;t print out in Internet Explorer (they&apos;re fine in Firefox). Why?'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5969964980761454641</id><published>2011-10-31T16:32:00.010+11:00</published><updated>2011-11-07T17:48:38.629+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='CAML'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Specifying Sort Order When Querying the SharePoint List Web Service with CAML and jQuery (via Lists.asmx)</title><content type='html'>I had a couple of problems today with specifying the sort order of data returned from a CAML query via a jQuery AJAX call. It seemed that no matter what setting I put in, it always seemed to return an unordered resultset.&lt;br /&gt;&lt;br /&gt;I resolved the problem by looking at the requests in Fiddler that were&amp;nbsp;produced by U2U CAML query Builder. The main problem was that I wasn't correctly wrapping the CAML&amp;nbsp;"Query" node in&amp;nbsp;a parent "query" node. Now you only have to do this when you're doing jQuery calls directly against web services - and are shielded from this somewhat when you are calling the SharePoint client object model (for details you can look here &lt;a href="http://msdn.microsoft.com/en-us/library/gg701783.aspx"&gt;http://msdn.microsoft.com/en-us/library/gg701783.aspx&lt;/a&gt;). Why I'm using&amp;nbsp;web service calls directly is a discussion for another time (and I wouldn't automatically turn to using it as a preference - as described here &lt;a href="http://msdn.microsoft.com/en-us/library/ee539764.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee539764.aspx&lt;/a&gt;) - but I'll&amp;nbsp;say for now that it is&amp;nbsp;for consistency with existing code (The client object model is using the web services underneath as well, but has batching facilities). See below for an example of a jQuery call which does sorting that worked for me. U2U CAML Query builder will also give you the valid internal name for the field.&lt;br /&gt;&lt;br /&gt;&lt;pre class="js" name="code"&gt;var errorMessage;&lt;br /&gt;  //Add order by if variable is set in other part of page (so it can be switched on or off on a page-by-page basis.&lt;br /&gt;  if (typeof missingCategoryDisplayMode_IsOnline != 'undefined' &amp;amp;&amp;amp; missingCategoryDisplayMode_IsOnline == true  ) //Variable should be set by another content query web part on page&lt;br /&gt;  {&lt;br /&gt;   var orderBy = "&lt;orderby&gt;\&lt;br /&gt;       &lt;fieldref ascending="True" name="Online_x0020_Priority"&gt;\&lt;br /&gt;      &lt;/orderby&gt;";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;  {&lt;br /&gt;   var contentCategoryCAML = "&amp;lt;?xml version='1.0' encoding='utf-8'?&amp;gt; \&lt;br /&gt;        &amp;lt;soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' \&lt;br /&gt;           xmlns:xsd='http://www.w3.org/2001/XMLSchema' \&lt;br /&gt;           xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'&amp;gt;&amp;lt;soap:Body&amp;gt; \&lt;br /&gt;           &amp;lt;GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'&amp;gt; \&lt;br /&gt;           &amp;lt;listName&amp;gt;Content Categories&amp;lt;/listName&amp;gt; \&lt;br /&gt;           &amp;lt;query&amp;gt;\&lt;br /&gt;           &amp;lt;Query xmlns=''&amp;gt;\&lt;br /&gt;           " + orderBy +&lt;br /&gt;           "&amp;lt;/Query&amp;gt;\&lt;br /&gt;           &amp;lt;/query&amp;gt;\&lt;br /&gt;           &amp;lt;viewFields&amp;gt;\&lt;br /&gt;           &amp;lt;ViewFields xmlns='' /&amp;gt;\&lt;br /&gt;           &amp;lt;/viewFields&amp;gt;\&lt;br /&gt;           &amp;lt;queryOptions&amp;gt;\&lt;br /&gt;           &amp;lt;QueryOptions xmlns=''/&amp;gt; \&lt;br /&gt;           &amp;lt;/queryOptions&amp;gt;&amp;lt;/GetListItems&amp;gt; \&lt;br /&gt;         &amp;lt;/soap:Body&amp;gt;&amp;lt;/soap:Envelope&amp;gt;";&lt;br /&gt;   $.ajax({&lt;br /&gt;    url: listUrl,&lt;br /&gt;    type: "POST",&lt;br /&gt;    dataType: "xml",&lt;br /&gt;    data: contentCategoryCAML,&lt;br /&gt;    complete: ContentCategoryResult,&lt;br /&gt;    contentType: "text/xml; charset=\"utf-8\""&lt;br /&gt;   });&lt;br /&gt;  }&lt;br /&gt;  catch (ex)&lt;br /&gt;  {&lt;br /&gt;   displayError("There was an error retrieving data from the Content Categories list. Please see IT support for assistance.");&lt;br /&gt;   return;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  function ContentCategoryResult(xData, status)&lt;br /&gt;  {&lt;br /&gt;   $(xData.responseXML).find("z\\:row").each(function () &lt;br /&gt;   {           &lt;br /&gt;      var Title = $(this).attr("ows_LinkTitle");           &lt;br /&gt;      arrContentCat.push(Title);  //Adding the results in an array&lt;br /&gt;   });&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This adds items to an array that are used later for rendering. I needed a different sort order based on the page - so this was done using a seperate javascript file that is placed into a Content Editor Web Part on pages to set the sort order variable. &lt;br /&gt;&lt;br /&gt;I also use the SharePoint client model to programatically determine the site collection path and to ensure that the list web service of the current site collection root is used (you can't determine that just by the url):&lt;br /&gt;&lt;br /&gt;&lt;pre class="js" name="code"&gt;function MenuInitialize()&lt;br /&gt; {&lt;br /&gt;     var clientContext = new SP.ClientContext();&lt;br /&gt;        var siteColl = clientContext.get_site();&lt;br /&gt;        myweb = siteColl.get_rootWeb();&lt;br /&gt;        clientContext.load(myweb);&lt;br /&gt;        /* Execute async required*/&lt;br /&gt;        clientContext.executeQueryAsync(Function.createDelegate(this, executeRequestAndRender), Function.createDelegate(this, getFailed));&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function executeRequestAndRender() {&lt;br /&gt;  var siteCollectionUrl = myweb.get_serverRelativeUrl();&lt;br /&gt;  var listWebServiceUrl = siteCollectionUrl + "/_vti_bin/lists.asmx"&lt;br /&gt;  //When at the root, siteCollectionUrl is '/', but other sites have /sitecollection/sites&lt;br /&gt;  listWebServiceUrl = listWebServiceUrl.replace('//', '/');&lt;br /&gt;  /* When complete, we can render requests */&lt;br /&gt;  RenderMenu_ContentCategoryList(listWebServiceUrl);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For the SharePoint Client Object model to work of course, you should always tell Script on demand (SOD) to process the code that references the SP client object model &lt;strong&gt;only &lt;/strong&gt;when the SP.js file has been loaded:&lt;br /&gt;&lt;br /&gt;&lt;pre class="js" name="code"&gt;$(document).ready(function()&lt;br /&gt;{&lt;br /&gt; /*Ensure that the Sp.js is loaded (using Script on Demand (SOD) SharePoint library) so the client object model functions correctly */&lt;br /&gt; SP.SOD.executeOrDelayUntilScriptLoaded(MenuInitialize, 'SP.js');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5969964980761454641?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5969964980761454641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5969964980761454641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5969964980761454641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5969964980761454641'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/10/specifying-sort-order-when-querying.html' title='Specifying Sort Order When Querying the SharePoint List Web Service with CAML and jQuery (via Lists.asmx)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-4213599966773000388</id><published>2011-10-18T18:51:00.001+11:00</published><updated>2011-10-19T17:12:38.659+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Best Practices'/><title type='text'>SharePoint 2010 - My jQuery Scripts are Broken on the Publishing Portal Thumbnails.aspx Page. All other pages are fine.</title><content type='html'>I've had this problem many times in ASP.NET but never in SharePoint 2010. Today, one of our jQuery script implementations was failing on just a couple of the SharePoint pages - in particular the Publishing Portal Thumbnails Page. &lt;br /&gt;&lt;br /&gt;All the jQuery objects were returning null values even though it worked for all the pages in the SharePoint site. The problem is back to that &lt;strong&gt;golden oldie of the jQuery object shortcut of $ conflicting with the Microsoft AJAX framework&lt;/strong&gt;. Both frameworks use the $ as an object shortcut and so this causes problems. I almost felt nostalgic getting this exception :o). &lt;br /&gt;&lt;br /&gt;Why does it only happen on a couple of pages in SharePoint 2010? They are the only ones which have script references to the MS AJAX javascript libraries.&lt;br /&gt;&lt;br /&gt;There are ways around this using aliases (via the&amp;nbsp;&lt;em&gt;jQuery.noConflict() &lt;/em&gt;command)&amp;nbsp;- but the simplest way is to &lt;strong&gt;just use jQuery as a best practice when working within SharePoint 2010 - &lt;/strong&gt;&amp;nbsp;with a find and replace of "$(" with "jQuery(" as needed. This fixed the problem. &lt;br /&gt;&lt;br /&gt;Too easy!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-4213599966773000388?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/4213599966773000388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=4213599966773000388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4213599966773000388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4213599966773000388'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/10/sharepoint-2010-my-jquery-scripts-are.html' title='SharePoint 2010 - My jQuery Scripts are Broken on the Publishing Portal Thumbnails.aspx Page. All other pages are fine.'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7099637137266975202</id><published>2011-10-12T13:17:00.000+11:00</published><updated>2011-10-12T13:17:00.703+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Branding'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>CSS Positioning Refresher - Relative vs Absolute vs Static vs Fixed - SharePoint 2010 Branding</title><content type='html'>My current client is a media company who wanted branding done as part of a SharePoint 2010 Portal implementation project. One problem arose because their&amp;nbsp;standard operating environment&amp;nbsp;uses Internet Explorer&amp;nbsp;7. Our IE 7 specific issues arose because of IE7's position behaviour and it's interaction with a dynamic pop-down DIV that we were injecting with jQuery.&lt;br /&gt;&lt;br /&gt;In IE7 (not in IE8+ or Firefox), our whole content div in SharePoint was getting pushed down by our hidden div used as part of the pop-down menu. Turns out our resolution to fix this IE 7 was to make our hidden div to use &lt;strong&gt;position:absolute&lt;/strong&gt; rather than relative/static.&lt;br /&gt;&lt;br /&gt;The critical difference between relative and absolute in particular is not how it changes the behaviour of the div - but rather how it affects the flow of &lt;strong&gt;OTHER &lt;/strong&gt;elements on the page. This is particularly important when you are injecting elements into SharePoint with jQuery. The best explanation of CSS positioning&amp;nbsp;(and how it affects other html elements)&amp;nbsp;I've found is here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.w3schools.com/css/css_positioning.asp"&gt;http://www.w3schools.com/css/css_positioning.asp&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;RELATIVE:&lt;/strong&gt; The content of relatively positioned elements can be moved and overlap other elements, but the &lt;strong&gt;&lt;span style="color: red;"&gt;reserved space for the element is still preserved in the normal flow&lt;/span&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;strong&gt;ABSOLUTE:&lt;/strong&gt; &lt;br /&gt;Absolutely positioned elements are removed from the normal flow. &lt;strong&gt;&lt;span style="color: red;"&gt;The document and other elements behave like the absolutely positioned element does not exist (Yes! this is what we really want)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This still doesn't explain the rendering difference in IE7 vs IE8 vs Firefox apart from the fact that other browsers seem to be more forgiving when specifying your CSS positioning compared to IE7 (in Standards mode).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7099637137266975202?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7099637137266975202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7099637137266975202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7099637137266975202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7099637137266975202'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/10/css-positioning-refresher-relative-vs.html' title='CSS Positioning Refresher - Relative vs Absolute vs Static vs Fixed - SharePoint 2010 Branding'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3291568706491067037</id><published>2011-10-05T14:53:00.003+11:00</published><updated>2011-10-05T14:55:12.521+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Inline Editing'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePont 2010 - Why is Inline Editing not working even when enabled for the current view?</title><content type='html'>One of my colleagues at Oakton had issues in that a SharePoint 2010 Custom List wasn't allowing editing inline. &lt;br /&gt;&lt;br /&gt;Even when modifying the view and enabling the "Allow Inline" editing property of the list view - no errors, it just didn't work and the Edit icon just opened the full blown SharePoint modal dialog box as usual. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3sJsaHWBTkA/TovUi1-z9pI/AAAAAAAAAnQ/RYgq_ss1onU/s1600/InlineEditing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" kca="true" src="http://2.bp.blogspot.com/-3sJsaHWBTkA/TovUi1-z9pI/AAAAAAAAAnQ/RYgq_ss1onU/s640/InlineEditing.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The problem was that the list view must use the &lt;strong&gt;Default Style &lt;/strong&gt;for Inline editing to work.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WRRSVsZM4oc/TovUnKepTpI/AAAAAAAAAnU/HrObu4i6_u0/s1600/StyleDefaultInlineEditingSharePoint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="161" kca="true" src="http://3.bp.blogspot.com/-WRRSVsZM4oc/TovUnKepTpI/AAAAAAAAAnU/HrObu4i6_u0/s640/StyleDefaultInlineEditingSharePoint.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3291568706491067037?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3291568706491067037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3291568706491067037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3291568706491067037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3291568706491067037'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/10/sharepont-2010-why-is-inline-editing.html' title='SharePont 2010 - Why is Inline Editing not working even when enabled for the current view?'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-3sJsaHWBTkA/TovUi1-z9pI/AAAAAAAAAnQ/RYgq_ss1onU/s72-c/InlineEditing.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1947880215897240725</id><published>2011-09-08T16:14:00.001+10:00</published><updated>2011-09-08T16:14:53.710+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='SonicWall'/><title type='text'>Fix - My SonicWall Client Keeps Prompting for a Phone Book Entry even though I'm already connected</title><content type='html'>When connecting via Telstra Mobile Broadband and attempting to connect to a SonicWall VPN with the SonicWall client, I kept getting prompted for a Dialup Phone Book entry mutliple times. Every time I connected (though not when using normal wireless from home), I had to keep attempting a connection until the username and password prompt displayed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The fix for this problem is to ensure that the "LAN Only" drop down is selected:&lt;/strong&gt;&lt;br /&gt;1) Open the SonicWall VPN Global Client&lt;br /&gt;2) Click on Peers and Choose the correct connection; Click Edit&lt;br /&gt;3) Under Interface Selection, Choose "LAN Only" rather than "Automatic" in the drop down list.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-l2Y1sv9Gnuc/Tmhc2Fwi45I/AAAAAAAAAnM/3VbEaJA70c4/s1600/LANOnly2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" nba="true" src="http://1.bp.blogspot.com/-l2Y1sv9Gnuc/Tmhc2Fwi45I/AAAAAAAAAnM/3VbEaJA70c4/s320/LANOnly2.jpg" width="294" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1947880215897240725?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1947880215897240725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1947880215897240725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1947880215897240725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1947880215897240725'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/09/my-sonicwall-client-keeps-prompting-for.html' title='Fix - My SonicWall Client Keeps Prompting for a Phone Book Entry even though I&apos;m already connected'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-l2Y1sv9Gnuc/Tmhc2Fwi45I/AAAAAAAAAnM/3VbEaJA70c4/s72-c/LANOnly2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-365904751958368753</id><published>2011-09-06T15:11:00.001+10:00</published><updated>2011-09-06T15:18:43.391+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP SharePoint Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enteprise'/><title type='text'>Fix - Duet Enterprise/SharePoint 2010 Exception - "System.ServiceModel.QuotaExceededException: The size necessary to buffer the XML content exceeded the buffer quota."</title><content type='html'>When attempting to establish communications between SAP and SharePoint (using the Duet Enterprise Claims provider) today at a new client, I encountered the following exception in SharePoint (as per the ULS logs):&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;InnerException 1: System.ServiceModel.QuotaExceededException: The size necessary to buffer the XML content exceeded the buffer quota. Server stack trace: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.BufferedOutputStream.WriteCore(Byte[] buffer, Int32 offset, Int32 size) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlStreamNodeWriter.FlushBuffer() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.FlushBuffer() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlStreamNodeWriter.GetBuffer(Int32 count, Int32&amp;amp; offset) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.UnsafeWriteText(Char* chars, Int32 charCount) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.WriteText(Char[] chars, Int32 offset, Int32 count) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBaseWriter.WriteChars(Char[] chars, Int32 offset, Int32 count) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryWriter.WriteTextNode(XmlDictionaryReader reader, Boolean attribute) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlDictionaryWriter.WriteNode(XmlDictionaryReader reader, Boolean defattr) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ReceivedFault.CreateFault12Driver(XmlDictionaryReader reader, Int32 maxBufferSize, EnvelopeVersion version) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.MessageFault.CreateFault(Message message, Int32 maxBufferSize) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.ClientSecurityChannel`1.TryGetSecurityFaultException(Message faultMessage, Exception&amp;amp; faultException) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at [0]: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at Microsoft.SharePoint.BusinessData.SystemSpecific.Wcf.WcfSystemUtility.Execute(Object[] args) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at Microsoft.SharePoint.BusinessData.SystemSpecific.Wcf.WcfSystemUtility.ExecuteStatic(IMethodInstance methodInstance, ILobSystemInstance lobSystemInstance, Object[] args, IExecutionContext context) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at Microsoft.SharePoint.BusinessData.Runtime.DataClassRuntime.ExecuteInternalWithAuthNFailureRetry(ISystemUtility systemUtility, IMethodInstance methodInstanceToExecute, IMethod methodToExecute, ILobSystemInstance lobSystemInstance, ILobSystem lobSystem, IParameterCollection nonReturnParameters, Object[] overrideArgs) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at Microsoft.SharePoint.BusinessData.Runtime.DataClassRuntime.ExecuteInternal(IDataClass thisDataClass, ILobSystemInstance lobSystemInstance, ILobSystem lobSystem, IMethodInstance methodInstanceToExecute, IMethod methodToExecute, IParameterCollection nonReturnParameters, Object[]&amp;amp; overrideArgs)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I also received the following exception immediately after the above exception:&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&amp;gt; System.ServiceModel.QuotaExceededException: The size necessary to buffer the XML content exceeded the buffer quota. Server stack trace: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.BufferedOutputStream.WriteCore(Byte[] buffer, Int32 offset, Int32 size) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlStreamNodeWriter.FlushBuffer() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.FlushBuffer() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlStreamNodeWriter.GetBuffer(Int32 count, Int32&amp;amp; offset) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.UnsafeWriteText(Char* chars, Int32 charCount) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryNodeWriter.WriteText(Char[] chars, Int32 offset, Int32 count) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBaseWriter.WriteChars(Char[] chars, Int32 offset, Int32 count) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlBinaryWriter.WriteTextNode(XmlDictionaryReader reader, Boolean attribute) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Xml.XmlDictionaryWriter.WriteNode(XmlDictionaryReader reader, Boolean defattr) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ReceivedFault.CreateFault12Driver(XmlDictionaryReader reader, Int32 maxBufferSize, EnvelopeVersion version) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.MessageFault.CreateFault(Message message, Int32 maxBufferSize) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.ClientSecurityChannel`1.TryGetSecurityFaultException(Message faultMessage, Exception&amp;amp; faultException) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at [0]: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at BCSServiceProxy.IWXManageCustomerIn.FindCustomerByElements(FindCustomerByElementsRequest request) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at BCSServiceProxy.WXManageCustomerInClient.BCSServiceProxy.IWXManageCustomerIn.FindCustomerByElements(FindCustomerByElementsRequest request) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at BCSServiceProxy.WXManageCustomerInClient.FindCustomerByElements(BPCCustGetAll BPCCustGetAll) -&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;-- End of inner exception stack trace --- &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp;amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red; font-size: xx-small;"&gt;at Microsoft.SharePoint.BusinessData.SystemSpecific.Wcf.WcfSystemUtility.Execute(Object[] args)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With my experiences with SAP, buffer overflows normally indicate that a large Java stack trace is coming back from SAP and it overloads the WCF client buffer which is expecting a normal SOAP response.&lt;br /&gt;&lt;br /&gt;To see the real exception, I tried to use Wireshark (&lt;a href="http://www.wireshark.org/"&gt;http://www.wireshark.org/&lt;/a&gt;)- but our setup had (not by choice) Netweaver and SharePoint on the same box - and &lt;strong&gt;Wireshark cannot listen to localhost traffic.&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;As usual, the Fiddler Tool HTTP proxy (&lt;a href="http://www.fiddler2.com/fiddler2/"&gt;http://www.fiddler2.com/fiddler2/&lt;/a&gt;)&amp;nbsp;came to the rescue- as it &lt;strong&gt;can actually listen to traffic occurring between applications on the same machine. &lt;/strong&gt;When running Fiddler and listening to the https traffic, it popped up with an exception regarding certificate errors:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Session #24: The remote server (ausyd-a-sh1) presented a certificate that did not validate, due to RemoteCertificateChainErrors.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;SUBJECT: CN=ausyd-a-sh1, OU=I0020310622, OU=SAP Web AS, O=SAP Trust Community, C=DE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;ISSUER: CN=ausyd-a-sh1, OU=I0020310622, OU=SAP Web AS, O=SAP Trust Community, C=DE&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;EXPIRES: 1/01/2038 11:00:01 AM&lt;/span&gt;&lt;br /&gt;I went to the server url in Internet Explorer and sure enough there was a certificate error occurring when going to the URL of the SAP server - at &lt;a href="https://ausyd-a-sh1:8001/"&gt;https://ausyd-a-sh1:8001/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Jz9PcUIabWs/TmV9wW7BDlI/AAAAAAAAAm0/XabXQXV37Dc/s1600/CertificateException.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247px" nba="true" src="http://2.bp.blogspot.com/-Jz9PcUIabWs/TmV9wW7BDlI/AAAAAAAAAm0/XabXQXV37Dc/s320/CertificateException.JPG" width="320px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Basically this exception was occurring because the SAP SSL certificate was not in the Trusted Root Certification Authorities store in Windows. To import it, I just opened mmc at a command prompt and added the certificates Snap-In (via File - Add/Remove Snap In... - for the Local Computer.&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;In Certificates (Local Computer), I went to Trusted Root Certification Authorities - Certificates and Imported the SAP Certificate in. &lt;br /&gt;&lt;br /&gt;However, I kept getting the same exception. On closer inspection, the thumbprint of the&amp;nbsp;SharePoint Security Token Service (STS)&amp;nbsp;certificate was not the same as what had been imported into SAP - this was becuase &lt;strong&gt;&lt;em&gt;SharePoint had been reinstalled&lt;/em&gt;&lt;/strong&gt; - which changes the SharePoint STS certificate (i.e. SharePoint STS certificates are &lt;strong&gt;install specific&lt;/strong&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-xIeOqfnmyus/TmWAXQH3v5I/AAAAAAAAAm8/DlR_HXyJMyo/s1600/MismatchingCertificates.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260px" src="http://4.bp.blogspot.com/-xIeOqfnmyus/TmWAXQH3v5I/AAAAAAAAAm8/DlR_HXyJMyo/s400/MismatchingCertificates.JPG" width="400px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;span lang="EN-US" style="font-family: inherit; font-size: 11pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"&gt;I then received the following Exception - which was related to user mappings in SAP:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;strong&gt;An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;To resolve this last exception: &lt;/div&gt;&lt;div style="text-align: left;"&gt;1) We made sure &lt;strong&gt;SharePoint::&lt;/strong&gt; was used to prefix the name in SAP (in the &lt;strong&gt;VUSEREXITID&lt;/strong&gt; table) - this prefix would normally be added through the Duet Active Directory user import job (specific to Duet Enterprise) - but we don't have AD in our environment.&lt;br /&gt;2) We then updated the STS certificate in the SAP Certificate store (using SAP transaction &lt;strong&gt;/nstrust&lt;/strong&gt;) &lt;/div&gt;&lt;div style="text-align: left;"&gt;3) Used the /nsaml2 transaction to update the certificate used there as well.&lt;br /&gt;&lt;br /&gt;This resolved all our SAP to SharePoint communication issues.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-365904751958368753?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/365904751958368753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=365904751958368753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/365904751958368753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/365904751958368753'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/09/fix-duet-enterprisesharepoint-2010.html' title='Fix - Duet Enterprise/SharePoint 2010 Exception - &quot;System.ServiceModel.QuotaExceededException: The size necessary to buffer the XML content exceeded the buffer quota.&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Jz9PcUIabWs/TmV9wW7BDlI/AAAAAAAAAm0/XabXQXV37Dc/s72-c/CertificateException.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3600027992700716974</id><published>2011-08-30T17:42:00.003+10:00</published><updated>2011-08-30T17:48:58.337+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoitn 2010'/><title type='text'>FIX - SharePoint 2010 - Disabled New, Extend and Delete Buttons for Web Applications in Central Administration</title><content type='html'>My&amp;nbsp;current client (a large NSW Government Department) has a test environment that doesn't have Active Directory&amp;nbsp;and they required&amp;nbsp;Duet&amp;nbsp;Enterprise to be installed. After a basic install of SharePoint 2010 with SP1- in Windows Server 2008 R2, SQL 2008 R2, I was alarmed to find that I couldn't create new web applications via Central Administration. When I hovered over the buttons, it said that this functionality is disabled due to insufficient permissions:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DF9-WmIeho8/TlyRFWsWa7I/AAAAAAAAAms/MpD3wc_qJ3I/s1600/DisabledButtons.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300px" src="http://2.bp.blogspot.com/-DF9-WmIeho8/TlyRFWsWa7I/AAAAAAAAAms/MpD3wc_qJ3I/s400/DisabledButtons.bmp" width="300px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I also couldn't add users to the farm administrators account - I would get an odd exception - &lt;span style="color: red;"&gt;&lt;strong&gt;"&lt;span lang="EN-US" style="font-family: 'Calibri','sans-serif'; font-size: 11pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"&gt;Local administrator privilege is required to update the Farm Administrators' group."&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I tried rebooting, uninstalling, reinstalling to no avail&amp;nbsp;- the same problem persisted.&lt;br /&gt;There are many recommended fixes for this problem - most of which didn't work for me:&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Run in an alternative browser such as Google Chrome/Firefox &lt;strong&gt;- this didn't work for me.&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Ensure that the Application Pool account in IIS has the correct database permissions - &lt;strong&gt;this wasn't the problem in my situation as the user was a full local administrator and sysadmin on the database&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Ensure that you run IE as an administrator - &lt;strong&gt;this is already done by the default shortcut to the SharePoint Central Admin (I wasn't opening up SharePoint Central Admin from a seperately instantiated browser - so this also wasn't the problem)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Ensure that UAC is turned off as this somehow interferes with the application of security to those controls. Most references to this indicated that this worked for Windows&amp;nbsp;7, but there was no reference to this working for Windows Server products.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;To my surprise, number 4 was the one that worked for me. To do this (in Windows Server 2008+), you have to go to:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: #6fa8dc;"&gt;Control Panel - User Accounts - Turn User Account Control On or Off&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After the reboot, the controls were suddenly re-enabled. This is not a recommended configuration - but this was purely for demonstration purposes rather than being a production-ready install (we would be using Active Directory for that anyway). &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3600027992700716974?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3600027992700716974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3600027992700716974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3600027992700716974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3600027992700716974'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/08/fix-sharepoint-2010-disabled-new-extend.html' title='FIX - SharePoint 2010 - Disabled New, Extend and Delete Buttons for Web Applications in Central Administration'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-DF9-WmIeho8/TlyRFWsWa7I/AAAAAAAAAms/MpD3wc_qJ3I/s72-c/DisabledButtons.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2570493471865314847</id><published>2011-08-26T19:11:00.010+10:00</published><updated>2011-08-27T08:29:02.135+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='IWorkflowTypeExtender'/><category scheme='http://www.blogger.com/atom/ns#' term='Master Data Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Master Data Management'/><category scheme='http://www.blogger.com/atom/ns#' term='MDM'/><category scheme='http://www.blogger.com/atom/ns#' term='MDS'/><title type='text'>SQL Server 2008 R2 Master Data Services (MDS) IWorkflowTypeExtender - Implementation and Debugging</title><content type='html'>SQL 2008 R2 Master Data Services (MDS) has a basic plugin framework which allows you to handle events when business rule workflows are kicked off. You implement your custom plugins by:&lt;br /&gt;1) Creating a class that implements IWorkflowTypeExtender. This is contained in the following assembly:&lt;br /&gt;&lt;b&gt;C:\Program Files\Microsoft SQL Server\Master Data Services\WebApplication\bin\Microsoft.MasterDataServices.Core.dll &lt;br /&gt;&lt;/b&gt; &lt;br /&gt;2) Build and deploy the file to the bin directory (typically "C:\Program Files\Microsoft SQL Server\Master Data Services\WebApplication\bin") or a subdirectory of it if you use a PrivatePath (discussed below).&lt;br /&gt;3) Modify the "&lt;b&gt;Microsoft.MasterDataServices.Workflow.exe.config&lt;/b&gt;" file to point to your new assembly:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;  &amp;lt;configsections&amp;gt;&lt;br /&gt;    &amp;lt;section name="loggingConfiguration" requirepermission="true" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"&amp;gt;&lt;br /&gt;    &amp;lt;sectiongroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&amp;gt;&lt;br /&gt;      &amp;lt;section name="Microsoft.MasterDataServices.Workflow.Properties.Settings" requirepermission="false" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"&amp;gt;&lt;br /&gt;    &amp;lt;/sectiongroup&amp;gt;&lt;br /&gt;  &amp;lt;/configsections&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4) Add another section to your config file that indicates what workflows to listen to (based on the value flag)&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;applicationSettings&amp;gt;&lt;br /&gt;    &amp;lt;Microsoft.MasterDataServices.Workflow.Properties.Settings&amp;gt;&lt;br /&gt;      &amp;lt;setting name="ConnectionString" serializeAs="String"&amp;gt;&lt;br /&gt;        &amp;lt;value&amp;gt;Server=.;Database=MasterDataServices;Integrated Security=SSPI&amp;lt;/value&amp;gt;&lt;br /&gt;      &amp;lt;/setting&amp;gt;&lt;br /&gt;      &amp;lt;setting name="WorkflowTypeExtenders" serializeAs="String"&amp;gt;&lt;br /&gt;        &amp;lt;value&amp;gt;PAC=CompanyName.MasterDataWorkflow.WorkflowExtender, CompanyName.MasterDataWorkflow;OOB=Microsoft.MasterDataServices.Workflow.WorkflowTypeTest, Microsoft.MasterDataServices.Workflow, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91&amp;lt;/value&amp;gt;&lt;br /&gt;      &amp;lt;/setting&amp;gt;&lt;br /&gt;    &amp;lt;/Microsoft.MasterDataServices.Workflow.Properties.Settings&amp;gt;&lt;br /&gt;  &amp;lt;/applicationSettings&amp;gt;&lt;br /&gt;  &amp;lt;appSettings&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The plugin will allow you to obtain information about the calling workflow via the &lt;b&gt;StartWorkflow(string workflowType, System.Xml.XmlElement dataElement)&lt;/b&gt; method that must be implemented as part of the interface of IWorkflowTypeExtender. You receive all the business context data via the data element parameter as an Xml snippet. &lt;br /&gt;&lt;br /&gt;Once you have deployed this assembly and update the config files, the simplest way to debug inside Visual Studio is to go to your Project Properties, Debug Tab and Set the Startup Program to be &lt;br /&gt;"C:\Program Files\Microsoft SQL Server\Master Data Services\WebApplication\bin\Microsoft.MasterDataServices.Workflow.exe". &lt;br /&gt;&lt;br /&gt;After doing that, add a commandline parameter of &lt;b&gt;"-console"&lt;/b&gt; which will give you a visual display of workflow plugins that have been loaded into the MDS Workflow Application Domain. It also allows you to print out to the console via Console.WriteLine() to assist with your development and debugging efforts.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Debug Setup&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-dxsFXuFBp5c/Tldi8424sdI/AAAAAAAAAmU/bINeksqqNbk/s1600/MDSDebuggingSetup.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="311" width="400" src="http://1.bp.blogspot.com/-dxsFXuFBp5c/Tldi8424sdI/AAAAAAAAAmU/bINeksqqNbk/s400/MDSDebuggingSetup.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;The MDS Workflow Console window:&lt;br /&gt;&lt;/b&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XXgi-2L5DVQ/TldjL8iF4jI/AAAAAAAAAmc/x7yfWE7oAoY/s1600/ConsoleMode.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="137" width="400" src="http://2.bp.blogspot.com/-XXgi-2L5DVQ/TldjL8iF4jI/AAAAAAAAAmc/x7yfWE7oAoY/s400/ConsoleMode.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As a best practice, use a PrivatePath in your Assembly Bindings in your Microsoft.MasterDataServices.Workflow.exe.config file. This will allow fusion to find your custom binaries in a subfolder rather than the binary root. Keeping all custom binaries in subfolders will help you to avoid file naming conflicts or bloating your root MDS workflow bin directory.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nU2XLHdvPsk/TldlUJ2CuNI/AAAAAAAAAmk/tQGZBAIIcYc/s1600/UseAssemblyBindings.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="98" width="400" src="http://4.bp.blogspot.com/-nU2XLHdvPsk/TldlUJ2CuNI/AAAAAAAAAmk/tQGZBAIIcYc/s400/UseAssemblyBindings.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The simplest way to see what's going on is to just render the Xml from the workflow handler to the MDS workflow console window via an XmlTextWriter e.g. &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public void StartWorkflow(string workflowType, System.Xml.XmlElement dataElement)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine("workflow type: {0} ", workflowType);&lt;br /&gt;&lt;br /&gt;            var writer = new XmlTextWriter(Console.Out);&lt;br /&gt;            writer.Formatting = Formatting.Indented;&lt;br /&gt;            dataElement.WriteTo(writer);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2570493471865314847?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2570493471865314847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2570493471865314847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2570493471865314847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2570493471865314847'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/08/sql-server-2008-r2-master-data-services.html' title='SQL Server 2008 R2 Master Data Services (MDS) IWorkflowTypeExtender - Implementation and Debugging'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-dxsFXuFBp5c/Tldi8424sdI/AAAAAAAAAmU/bINeksqqNbk/s72-c/MDSDebuggingSetup.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3258764077123720053</id><published>2011-08-15T21:40:00.005+10:00</published><updated>2011-08-15T21:45:15.419+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SSAS'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel 2010'/><title type='text'>Fix for Exception - "Initialization of the data source failed" in TFS 2010 Excel Reports against SSAS 2008 R2</title><content type='html'>At one of my banking clients, there was an issue with the setup of the TFS Reports in Excel. When opening the Excel reports provided with TFS, it was attempting to connect to the TFS Analysis Services Cube - and generating the following exception:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Initialization of the data source failed.&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Check the database server or contact your database administrator. Make sure the external database is available, and then try the operation again. If you see this message again, create a new data &lt;/span&gt;&lt;span style="color: red;"&gt;source to connect to the database.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-usUlBvdbmb0/TkkDWo10kMI/AAAAAAAAAmE/DNzH4w3YGYw/s1600/TFS2010_ExcelReports.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" naa="true" src="http://4.bp.blogspot.com/-usUlBvdbmb0/TkkDWo10kMI/AAAAAAAAAmE/DNzH4w3YGYw/s640/TFS2010_ExcelReports.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Then you get prompted for credentials, and then get a message about reinstallation of drivers. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1rXxgn3Tu68/TkkDzB-R39I/AAAAAAAAAmI/U1-o8Sp0DHM/s1600/TFS2010_ExcelReports_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" naa="true" src="http://2.bp.blogspot.com/-1rXxgn3Tu68/TkkDzB-R39I/AAAAAAAAAmI/U1-o8Sp0DHM/s320/TFS2010_ExcelReports_2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There are a few red-herrings in the messages provided by Excel - but the underlying problem in our situation was just a permissions one. &lt;br /&gt;&lt;br /&gt;To resolve, you just need to give the end user with the problems permissions to access the SSAS database (e.g. by adding them to the TFSDataReaders role in SSAS).&amp;nbsp; Alternatively, you can add the user as a TFS Administrator in the TFS Administration console (though this is not preferred as it is against the security principle of "least priviledge").&lt;br /&gt;&lt;br /&gt;Till next time,&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3258764077123720053?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3258764077123720053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3258764077123720053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3258764077123720053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3258764077123720053'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/08/fix-for-exception-initialization-of.html' title='Fix for Exception - &quot;Initialization of the data source failed&quot; in TFS 2010 Excel Reports against SSAS 2008 R2'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-usUlBvdbmb0/TkkDWo10kMI/AAAAAAAAAmE/DNzH4w3YGYw/s72-c/TFS2010_ExcelReports.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1181626442755930252</id><published>2011-07-28T19:59:00.003+10:00</published><updated>2011-07-28T20:05:53.746+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Business Connectivity Services'/><title type='text'>How to force a SharePoint 2010 Business Connectivity Services (BCS) Client Cache to rebuild</title><content type='html'>&lt;strong&gt;&lt;span style="color: red;"&gt;WARNING! This tip involves potential loss of data.&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;The Business Connectivity Services (BCS) Client Cache is a combination of PST files and a SQL Server Compact Edition database - that allows for you to operate with Business data while in disconnected or limited-connection scenarios.&lt;br /&gt;&lt;br /&gt;It contains &lt;strong&gt;all &lt;/strong&gt;the subscription information and data&amp;nbsp;for any items that you have made available offline via Business Connectivity Services.&amp;nbsp;However, there is no official way of flushing this cache - your &lt;strong&gt;BusinessDataCache.sdf&lt;/strong&gt; file will just keep growing and growing ad infinitum. You can query this data by connecting to it via Visual Studio 2010 via the Server Explorer/Data Connections task pane.(For reference, the Schema of the BCS Client Business Data Cache is shown below)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-yhcpgLGS2ak/TjEyw-Z5Q-I/AAAAAAAAAlg/hFw3EBy7HMQ/s1600/BCSClientCacheSchema.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-yhcpgLGS2ak/TjEyw-Z5Q-I/AAAAAAAAAlg/hFw3EBy7HMQ/s320/BCSClientCacheSchema.jpg" t$="true" width="178" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;At the risk of data loss (if you have any unsynched items), there is a way of recreating your cache without deleting your whole Windows Logon profile. This is as follows:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Uninstall any&amp;nbsp;Office Add-ins&amp;nbsp;you have e.g. Outlook Addins that use the BCS cache or create subscriptions in the BCS cache.&lt;/li&gt;&lt;li&gt;Kill the BCSSync.exe process in memory using Windows task manager.&lt;/li&gt;&lt;li&gt;Go to the following folder on the machine:&lt;br /&gt;%userprofile%\AppData\Local\Microsoft\BCS &lt;/li&gt;&lt;li&gt;Rename BusinessDataCache.sdf to zzBusinessDataCache.sdf&lt;/li&gt;&lt;li&gt;Run "%ProgramFiles%\Microsoft Office\Office14\BCSSync.exe" /Restart /Activation /RestartApps to restart the BCS Synchronization service.&lt;/li&gt;&lt;li&gt;Your BusinessDataCache.sdf&amp;nbsp; file will be regenerated.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1181626442755930252?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1181626442755930252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1181626442755930252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1181626442755930252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1181626442755930252'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/how-to-force-sharepoint-2010-business.html' title='How to force a SharePoint 2010 Business Connectivity Services (BCS) Client Cache to rebuild'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-yhcpgLGS2ak/TjEyw-Z5Q-I/AAAAAAAAAlg/hFw3EBy7HMQ/s72-c/BCSClientCacheSchema.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-775770671995177670</id><published>2011-07-28T12:47:00.000+10:00</published><updated>2011-07-28T12:47:05.188+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Business Connectivity Services'/><title type='text'>How to Troubleshoot Business Connectivity Services (BCS) in SharePoint 2010 using Performance Monitor Data Collector Sets</title><content type='html'>When dealing with Business Connectivity Services&amp;nbsp;(BCS) errors (especially if they are occurring on Offline clients such as Outlook), the Event Log and SharePoint ULS Logs&amp;nbsp;don't give you the whole picture. &lt;br /&gt;&lt;br /&gt;To get a full verbose breakdown as to why your configuration or code is generating errors, you need to use Windows Performance Monitor (&lt;strong&gt;perfmon&lt;/strong&gt;) to generate a verbose trace to get the&amp;nbsp;full details&amp;nbsp;and stack traces that are often needed to diagnose issues.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To set up&amp;nbsp;an Event Trace on BCS you can do the following:&lt;/strong&gt;&lt;br /&gt;&lt;ol style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;li&gt;Start Up Performance&amp;nbsp;Monitor by typing "perfmon" at the Windows Start Prompt.&lt;br /&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QSqWk-N1yig/TjDE3-iI6ZI/AAAAAAAAAlE/zgG2Pf5V0PI/s1600/PerfmonStart.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-QSqWk-N1yig/TjDE3-iI6ZI/AAAAAAAAAlE/zgG2Pf5V0PI/s320/PerfmonStart.jpg" t$="true" width="260" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;In Windows Performance Monitor, Expand the "User Defined Node" and then Right-Click and Choose "New Collector Set"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-lk54a7vhns0/TjDKH79kiXI/AAAAAAAAAlI/G1FhAoc-0W0/s1600/NewDataCollectorSet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-lk54a7vhns0/TjDKH79kiXI/AAAAAAAAAlI/G1FhAoc-0W0/s1600/NewDataCollectorSet.jpg" t$="true" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;In the First Screen of the Wizard, Name the Collector Set (e.g. BCSCollectorSet). Choose the "Create Manually (Advanced)" radio button.&lt;a href="http://3.bp.blogspot.com/-4NVkgdki_xM/TjDKjylyDwI/AAAAAAAAAlM/Sj5UdJaRKP0/s1600/BCSCollectorSet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://3.bp.blogspot.com/-4NVkgdki_xM/TjDKjylyDwI/AAAAAAAAAlM/Sj5UdJaRKP0/s320/BCSCollectorSet.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;When&amp;nbsp;asked "What&amp;nbsp;type of data do&amp;nbsp;you want to include?", choose "Event Trace Data"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-fyeqSlsBGSw/TjDK6tK4pSI/AAAAAAAAAlQ/uxvNWI0STco/s1600/ChooseEventTraceData.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://3.bp.blogspot.com/-fyeqSlsBGSw/TjDK6tK4pSI/AAAAAAAAAlQ/uxvNWI0STco/s320/ChooseEventTraceData.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;When asked "Which event trace providers&amp;nbsp;would you like to enable?", select&amp;nbsp;the "&lt;strong&gt;Microsoft-Office&lt;/strong&gt;-Business Connectivity Services" and the "&lt;strong&gt;Microsoft-SharePoint&lt;/strong&gt;-Products-Business Connectivity Services" providers. If you are using Duet Enterprise, you may also want to add the "Duet Enterprise" Event Provider.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-6q2DxdDAYT4/TjDLNaZNKhI/AAAAAAAAAlU/jF9-iUrFc4E/s1600/ClickOK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://1.bp.blogspot.com/-6q2DxdDAYT4/TjDLNaZNKhI/AAAAAAAAAlU/jF9-iUrFc4E/s320/ClickOK.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Click "Finish" to Leave the other settings at the defaults.&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Start your trace by clicking on your collector set and clicking the play icon.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-sSi5j6PNqJI/TjDM9LTogTI/AAAAAAAAAlc/VIr8EINel4E/s1600/StartTrace.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="102" src="http://2.bp.blogspot.com/-sSi5j6PNqJI/TjDM9LTogTI/AAAAAAAAAlc/VIr8EINel4E/s400/StartTrace.jpg" t$="true" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Once the trace is recorded, you can then open up the logs and view them in Windows Event Viewer by clicking on "Open Saved Log" and pointing to your newly created BCS Event trace file.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-HoxnQTwP4Hs/TjDL2MHRjGI/AAAAAAAAAlY/Tb8gp1wCUTM/s1600/OpenSavedLog.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://4.bp.blogspot.com/-HoxnQTwP4Hs/TjDL2MHRjGI/AAAAAAAAAlY/Tb8gp1wCUTM/s320/OpenSavedLog.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;If found this particularly useful when troubleshooting BCS Offline Caching issues on Outlook clients.&lt;br /&gt;&lt;br /&gt;The event trace indicated that an old version of my BCS models and connections was being used to the Duet/SAP system. &lt;br /&gt;&lt;br /&gt;To resolve my problem, I had to remove all instances of the BCS lists in Outlook by uninstalling Data Lists and Solutions that refer to that one SharePoint 2010 External Content Type. This resolved my caching problems and it stopped giving me "Access Denied" Exceptions when Synching with Outlook 2010.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-775770671995177670?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/775770671995177670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=775770671995177670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/775770671995177670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/775770671995177670'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/how-to-troubleshoot-business.html' title='How to Troubleshoot Business Connectivity Services (BCS) in SharePoint 2010 using Performance Monitor Data Collector Sets'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-QSqWk-N1yig/TjDE3-iI6ZI/AAAAAAAAAlE/zgG2Pf5V0PI/s72-c/PerfmonStart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7546427484561403293</id><published>2011-07-27T17:18:00.000+10:00</published><updated>2011-07-27T17:18:17.194+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ForeFront Identity Manager'/><title type='text'>Fix for "The service was unable to start because the version of the database does not match the version of the product." in ForeFront Identity Manager Sychronization Service for SharePoint 2010</title><content type='html'>I had an issue today with the ForeFront Identity Manager&amp;nbsp;Synchronization Service when Synching to Active Directory and&amp;nbsp;SAP in the User Profile Store. It was generating the following exception when I attempted to run a full or incremental User Profile synchronization: &lt;br /&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ywDHgawoYTs/Ti-7Odi-ACI/AAAAAAAAAlA/je5Wd20JSEY/s1600/FIMSyncIssue.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://4.bp.blogspot.com/-ywDHgawoYTs/Ti-7Odi-ACI/AAAAAAAAAlA/je5Wd20JSEY/s320/FIMSyncIssue.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;"The service was unable to start because the version of the database does not match the version of the product."&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;If you get this problem, you will need to reprovision the User Profile Synchronization Service Application by stopping and restarting it (and reentering the password for your syncrhonization service user).&amp;nbsp;This resolved the issues I was having - and the ForeFront Identity Manager service&amp;nbsp;could then start correctly. The steps to do this are as follows: &lt;br /&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;1.Central Admin&amp;gt;System Settings&amp;gt;Manage Services on Server (select the server where the User Profile Service is running) &lt;br /&gt;&lt;br /&gt;2.Stop the User Profile Service &lt;br /&gt;&lt;br /&gt;3.Stop the User Profile Synchronization Service (you will be prompted that this will deprovision the service) &lt;br /&gt;&lt;br /&gt;4.Once the services have stopped, Start the User Profile Service again &lt;br /&gt;&lt;br /&gt;5.Start the User Profile Synchronization Service again (you will be prompted to enter the password for the User Profile Service's svc account) -note1: this service can take a little while to restart; note2: if it does not restart successfully, restart the server and try again (this has worked for me) &lt;br /&gt;&lt;br /&gt;6.Once complete, the User Profile Service and User Profile Synchronization service should show as Started, and the 2 corresponding FIM services on the server should be running again. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For Reference: &lt;/strong&gt;&lt;br /&gt;I've mentioned this in the blog previously, but you can start up the ForeFront Identity Manager UI from the following location:&lt;br /&gt;&lt;br /&gt;"%ProgramFiles%\Microsoft Office Servers\14.0\Synchronization Service\UIShell\miisclient.exe"&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FuJa5kQOJ6E/Ti-7IQ0UYzI/AAAAAAAAAk8/IvgkekYNe0o/s1600/FIMManagerUI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="279" src="http://3.bp.blogspot.com/-FuJa5kQOJ6E/Ti-7IQ0UYzI/AAAAAAAAAk8/IvgkekYNe0o/s320/FIMManagerUI.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7546427484561403293?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7546427484561403293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7546427484561403293' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7546427484561403293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7546427484561403293'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/fix-for-service-was-unable-to-start.html' title='Fix for &quot;The service was unable to start because the version of the database does not match the version of the product.&quot; in ForeFront Identity Manager Sychronization Service for SharePoint 2010'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ywDHgawoYTs/Ti-7Odi-ACI/AAAAAAAAAlA/je5Wd20JSEY/s72-c/FIMSyncIssue.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-9121357813743920502</id><published>2011-07-22T16:44:00.000+10:00</published><updated>2011-07-22T16:44:32.142+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BCS Solutions'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010 Business Connectivity Services'/><title type='text'>SharePoint 2010 Business Connectivity Services (BCS) Local Cache Data</title><content type='html'>When you take a SharePoint 2010 list offline (e.g. into SharePoint Workspace or Outlook), BCS entities are created in your local drive. These are often supported by ClickOnce Office Solutions deployed via&amp;nbsp;Visual Studio Tools for Office 4.0 (VSTO). For reference,&amp;nbsp;the following locations are used for BCS data and ClickOnce installations:&lt;br /&gt;&lt;br /&gt;BCS Client Cache Data files are located in a hidden folder at:&lt;br /&gt;%USERPROFILE%\AppData\Local\Microsoft\BCS&lt;br /&gt;&lt;br /&gt;Supporting ClickOnce Applications are located at:&lt;br /&gt;%USERPROFILE%\AppData\Local\Apps&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-9121357813743920502?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/9121357813743920502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=9121357813743920502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9121357813743920502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9121357813743920502'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/sharepoint-2010-business-connectivity_22.html' title='SharePoint 2010 Business Connectivity Services (BCS) Local Cache Data'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6365524355708672388</id><published>2011-07-15T09:53:00.000+10:00</published><updated>2011-07-15T09:53:02.292+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClickOnce'/><category scheme='http://www.blogger.com/atom/ns#' term='VSTO'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Tools For Office'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enteprise'/><title type='text'>Fix for VSTO ClickOnce application - "Unable to install this application because an application with the same identity is already installed. To install this application, either modify the manifest version for this application or uninstall the preexisting application"</title><content type='html'>If you receive the following exception even though your VSTO ClickOnce&amp;nbsp;application is already uninstalled:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;em&gt;"Unable to install this application because an application with the same identity is already installed. To install this application, either modify the manifest version for this application or uninstall the preexisting application."&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then you may have issues with your ClickOnce application Cache. You have 2 options for clearing it:&lt;br /&gt;&lt;br /&gt;Running the following at a Visual Studio Command Prompt:&lt;br /&gt;&lt;strong&gt;mage -cc&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;Running the following at a command line on any machine with the problem:&lt;br /&gt;&lt;strong&gt;rundll32 dfshim CleanOnlineAppCache&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://vijayvepa.wordpress.com/2011/01/11/unable-to-install-this-application-because-an-application-with-the-same-identity-is-already-installed-to-install-this-application-either-modify-the-manifest-version-for-this-application-or-uninstall/"&gt;http://vijayvepa.wordpress.com/2011/01/11/unable-to-install-this-application-because-an-application-with-the-same-identity-is-already-installed-to-install-this-application-either-modify-the-manifest-version-for-this-application-or-uninstall/&lt;/a&gt;&amp;nbsp;for more details.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6365524355708672388?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6365524355708672388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6365524355708672388' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6365524355708672388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6365524355708672388'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/fix-for-vsto-clickonce-application.html' title='Fix for VSTO ClickOnce application - &quot;Unable to install this application because an application with the same identity is already installed. To install this application, either modify the manifest version for this application or uninstall the preexisting application&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6247303929855317610</id><published>2011-07-14T17:49:00.005+10:00</published><updated>2011-08-21T16:58:14.825+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise for Microsoft SharePoint and SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise'/><title type='text'>Business Benefits of Duet Enterprise and Comparison to SAP integration via Biztalk/Custom Solutions - Bringing SAP Business Data and SharePoint Collaboration Features Together and Ensuring a ROI</title><content type='html'>I've been involved in several SAP-SharePoint integration projects recently. Such projects typically relied heavily on an Enterprise Service Bus (ESBs - such as Biztalk or SAP PI), customizations and code. When you integrate SAP with SharePoint, there are many benefits that are provided when users don't have to use SAP GUI directly:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Hard benefits such as reduced licensing costs&lt;/li&gt;&lt;li&gt;Usability benefits such as allowing for a much simplified User Interface (people familiar with SAP GUI and SAP Portal will chuckle at this)&lt;/li&gt;&lt;li&gt;Supportability Benefits (as SharePoint and .NET skills are more common that SAP Portal skills&amp;nbsp;- at least in the Australian market).&lt;/li&gt;&lt;/ul&gt;However, since the release of &lt;strong&gt;Duet Enterprise 1.0 (&lt;/strong&gt;&lt;a href="http://ddkonline.blogspot.com/2011/01/duet-enterprise-released-and-available.html"&gt;http://ddkonline.blogspot.com/2011/01/duet-enterprise-released-and-available.html&lt;/a&gt;)&amp;nbsp;at the end of January, another integration option has been thrown into the mix. &lt;br /&gt;&lt;br /&gt;When my clients have been considering Duet Enterprise, one of the most often asked questions is &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"What does Duet Enterprise offer me that I can't do already with SharePoint, SAP, custom BAPIs, SAP Enterprise Services&amp;nbsp;and SharePoint 2010 Business Connectivity Services?"&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;Duet Enterprise brings a lot to the table - both on the SAP side and on the SharePoint side - however it's not the perfect solution for all problems. While consistency between systems is a vital principle in enterprise architecture, you really do have to choose the right &lt;strong&gt;combination &lt;/strong&gt;of tools to fit a given problem. Indeed, as with any architectural approach - you have to weigh up the pros and cons. &lt;br /&gt;&lt;br /&gt;I see the Duet Enterprise product&amp;nbsp;offering (and the development framework it provides) as having the following advantages over just a custom integration build:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Security and Security Best Practices.&lt;/strong&gt; Through the Duet Enterprise Claims-based Role Provider, it allows you to leverage the SAP security model and SAP Roles in SharePoint. This avoids the duplication of a potentially massive security hierarchy into the SharePoint space. By design, communication channels between systems are encrypted. This is one of the biggest value-adds. This also allows you to keep all your unstructured data (e.g. pdfs/documents) in SharePoint and still leverage the security model in SAP to limit access to these resources.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;SAP UWL Functionality&lt;/strong&gt; - It exposes your SAP Universal Worklist (UWL) into the &lt;strong&gt;native SharePoint task list &lt;/strong&gt;- you don't have to do a mashup or WSRP or some other IFrame hack.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Maintainability and&amp;nbsp;Reduced Development Efforts - &lt;/strong&gt;&amp;nbsp;It provides some out of the box functionality (site creation, business centric collaboration)&amp;nbsp;as a guideline and template for further development. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Diagnostic Tool Support - &lt;/strong&gt;Duet Provides Health Checks that allow you to check your setup, and provides mechanisms (via Correlation Identifiters) to help you diagnose&amp;nbsp;problems if requests are failing.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Official Supportability&lt;/strong&gt; - It is a product supported by Microsoft and SAP that incorporates their recommended approach for integration.&amp;nbsp;There is also official documentation for this integration approach.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;It has a Roadmap &lt;/strong&gt;- It is a platform that has a roadmap (as opposed to a completely custom system) which is something you build and have to take a lot&amp;nbsp;more responsibility for. As&amp;nbsp;Duet Enterprise grows in capabilities, you will regret &amp;nbsp;going down the 100% custom path.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Reporting Functionality - &lt;/strong&gt;it brings Reporting Functionality out of SAP via the Reporting Request mechanisms and alows you and your colleagues to collaboration around SAP Reports via standard SharePoint functionality (e.g. Social tagging)&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The BCS Solution Design Gallery &lt;/strong&gt;- It provides an enhanced model for the deployment of Office Based Solutions through SharePoint e.g. Administration screens for arranging your solution and for generating your solution from within SharePoint. See &lt;a href="http://msdn.microsoft.com/en-us/library/ff963717.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff963717.aspx&lt;/a&gt;&amp;nbsp;for more details.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Entity Collaboration Functionality - &lt;/strong&gt;Supports creation of collaboration sites surrounding SAP business entities. This however has to be checked against your SharePoint governance strategy and capacity plan.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;SAP HR Information imported into SharePoint User Profiles &lt;/strong&gt;-&amp;nbsp;ForeFront Identity Manager&amp;nbsp;is used&amp;nbsp;synchronize SAP User information (HR infotypes) from SAP via a BCS user profile connection, along with role synchronization via the Duet Enterprise Profile Synchronization timer job.&lt;/li&gt;&lt;/ol&gt;I have also been approached around concerns that it Duet Enterprise doesn't use a full ESB. &lt;strong&gt;However that's not true. &lt;/strong&gt;Duet is a mechanism&amp;nbsp;for providing&amp;nbsp;services on the SAP side (via an ESB on the SAP side e.g through SAP's middleware&amp;nbsp;solution "SAP PI")&amp;nbsp;- and consuming these services on the SharePoint side.&amp;nbsp;Duet Enterprise can live comfortably in an ESB-enabled an ecosystem.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;If you have SharePoint and SAP in your environment, I suggest that you consider Duet Enterprise&amp;nbsp;as part of your&amp;nbsp;enterprise strategy for improving the accessibility and collaboration around your most important business data.&lt;br /&gt;&lt;br /&gt;In most circumstances, it will give you a large amount of momentum (and provides all the plumbing) to allow you to provide a solid and supported solution for SAP to SharePoint integration - with an upgrade path.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6247303929855317610?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6247303929855317610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6247303929855317610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6247303929855317610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6247303929855317610'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/business-benefits-of-duet-enterprise.html' title='Business Benefits of Duet Enterprise and Comparison to SAP integration via Biztalk/Custom Solutions - Bringing SAP Business Data and SharePoint Collaboration Features Together and Ensuring a ROI'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3370302288090225482</id><published>2011-07-14T15:56:00.002+10:00</published><updated>2011-07-14T17:40:51.724+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Outlook 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS Solutions'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enteprise'/><title type='text'>SharePoint 2010 Business Connectivity Services (BCS) - Exposing External Lists through Outlook and the InfoPath External Data Part - Fix for "Catastrophic Failure"</title><content type='html'>Business Connectivity Services (BCS) along with BCS solutions allow you to expose your line of business data (e.g. SAP via Duet Enterprise) through Office client applications such as Outlook 2010. &lt;br /&gt;&lt;br /&gt;There are several walkthoughs of generating these solutions available online. Some examples of these are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Creating Intermediate Declarative Outlook Solutions Using Business Connectivity Services" (&lt;a href="http://msdn.microsoft.com/en-us/library/ee819909.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee819909.aspx&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;"How To: Create an Outlook Solution Using Duet Enterprise Outlook Application Designer"&lt;br /&gt;&amp;nbsp;- &lt;a href="http://msdn.microsoft.com/en-us/library/ff963717.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff963717.aspx&lt;/a&gt;&amp;nbsp;(Though this is specific to the Duet Enterprise Deployment mechanisms, many of the same steps apply).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I recently had issues with deployment of a Business Connectivity Services (BCS) solution in conjunction with Duet Enterprise 1.0. When my Duet Enterprise solution was deployed , I was being greeted with an exception as per the screenshot below, with a "Catastrophic failure" error message in place of where my custom task pane should show.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3b4WgGwcfU0/Th6BIswG6ZI/AAAAAAAAAkQ/6E09L2k9iVg/s1600/CatastrophicFailure.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" m$="true" src="http://3.bp.blogspot.com/-3b4WgGwcfU0/Th6BIswG6ZI/AAAAAAAAAkQ/6E09L2k9iVg/s640/CatastrophicFailure.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The main reason this exception was occuring was because my layout file in my solution (the xsd and schema&amp;nbsp;explanation for&amp;nbsp;BCS Solution&amp;nbsp;layout files&amp;nbsp;can be found here: &lt;a href="http://msdn.microsoft.com/en-us/library/ff394500.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff394500.aspx&lt;/a&gt;) had a "Width" custom property.&lt;br /&gt;&lt;br /&gt;Outlook couldn't handle this as a parameter to the web part - so it crashed out in a "Catastrophic" manner.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x7Ztz9zNzFc/Th6COX_zQ0I/AAAAAAAAAkU/EdFrOuN5ARU/s1600/InvalidCustomProperty.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" m$="true" src="http://1.bp.blogspot.com/-x7Ztz9zNzFc/Th6COX_zQ0I/AAAAAAAAAkU/EdFrOuN5ARU/s400/InvalidCustomProperty.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Also note that&amp;nbsp;for your task pane to have any datasource at all whatsoever, you still need to have a "DataSourceName" property set on your OBA part. The description on MSDN&amp;nbsp;here (&lt;a href="http://msdn.microsoft.com/en-us/library/ff394500.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff394500.aspx&lt;/a&gt;)&amp;nbsp;is somewhat misleading as it indicates that you only need a datasource for your External Data Part if it relies on data from one of the other parts in your layout. If you remove the datasource property, the attributes weren't populated - so the statement on MSDN isn't correct.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-x6r-vRqmGDc/Th6E2TG0oZI/AAAAAAAAAkY/TB1Dnb1sjCo/s1600/OnlyNeedIfControlIsAssociatedWithAnotherPart.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" m$="true" src="http://3.bp.blogspot.com/-x6r-vRqmGDc/Th6E2TG0oZI/AAAAAAAAAkY/TB1Dnb1sjCo/s640/OnlyNeedIfControlIsAssociatedWithAnotherPart.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3370302288090225482?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3370302288090225482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3370302288090225482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3370302288090225482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3370302288090225482'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/sharepoint-2010-business-connectivity_14.html' title='SharePoint 2010 Business Connectivity Services (BCS) - Exposing External Lists through Outlook and the InfoPath External Data Part - Fix for &quot;Catastrophic Failure&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-3b4WgGwcfU0/Th6BIswG6ZI/AAAAAAAAAkQ/6E09L2k9iVg/s72-c/CatastrophicFailure.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8884713217942689930</id><published>2011-07-13T10:13:00.001+10:00</published><updated>2011-07-13T10:14:15.523+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2008'/><title type='text'>Fix for SQL 2008 Exception - An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user 'DOMAIN\username', error code 0x5</title><content type='html'>After installing a recent series of Windows update, I began to get hundreds of SQL 2008 errors in the Windows Event log (20 or so per second) on one of our demonstration servers.&amp;nbsp;These were as follows:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user 'DOMAIN\username', error code 0x5.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;or &lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user 'DOMAIN\username', error code 0x2.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you do have these exceptions, then you most likely have connectivity issues to your Active Directory server - and the identity of the owner of your databases&amp;nbsp;&amp;nbsp;(dbo) is on that Active directory server. The SQL Service Broker is causing this exception.&amp;nbsp;If this is not a resolvable issue condition, then you can change the owner to a SQL login (e.g. sa) and this will resolve the exception.&lt;br /&gt;&lt;br /&gt;You can do this with the following command on each database that has the wrong owner:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;sp_changedbowner 'sa'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8884713217942689930?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8884713217942689930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8884713217942689930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8884713217942689930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8884713217942689930'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/fix-for-sql-2008-exception-20-items.html' title='Fix for SQL 2008 Exception - An exception occurred while enqueueing a message in the target queue. Error: 15404, State: 19. Could not obtain information about Windows NT group/user &apos;DOMAIN\username&apos;, error code 0x5'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-59432234032159882</id><published>2011-07-12T17:23:00.001+10:00</published><updated>2011-07-12T19:35:52.960+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Designer 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>SharePoint 2010 - Business Connectivity Services (BCS) / BDC model export - Default vs Client Option</title><content type='html'>When exporting BCS entities, you may have noticed 2 different "Settings" options available in the export dialog. If you're wondering what the differences are in the output - there don't appear to be any at all. &lt;br /&gt;&lt;br /&gt;To confirm this, I just did an export of 2 entities to a model file using the "&lt;strong&gt;Default&lt;/strong&gt;" option and the other export using the "&lt;strong&gt;Client&lt;/strong&gt;" option. Using the Notepad++ text compare tool, there was &lt;strong&gt;no physical difference between the output of the different export settings&lt;/strong&gt; - nor does there seem to be any documentation regarding this dropdown at all. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kZZmhjrfx9E/Thv1kNoQuGI/AAAAAAAAAkI/Ub3h36wj8Wo/s1600/BDCModelClientVsDefault.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" m$="true" src="http://3.bp.blogspot.com/-kZZmhjrfx9E/Thv1kNoQuGI/AAAAAAAAAkI/Ub3h36wj8Wo/s320/BDCModelClientVsDefault.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;However, if you look at the BCS connection information, you'll also notice 2 tabs that match the different settings or "profiles" that you can choose. Consequently, this is expected behaviour - as you'll only have differences when your settings are different between default and client. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-pVBDxo9rgD8/ThwPE4ClA3I/AAAAAAAAAkM/xTxYe2uOW9o/s1600/BCSModelClient2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" m$="true" src="http://4.bp.blogspot.com/-pVBDxo9rgD8/ThwPE4ClA3I/AAAAAAAAAkM/xTxYe2uOW9o/s400/BCSModelClient2.jpg" width="282" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-59432234032159882?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/59432234032159882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=59432234032159882' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/59432234032159882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/59432234032159882'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/sharepoint-2010-business-connectivity.html' title='SharePoint 2010 - Business Connectivity Services (BCS) / BDC model export - Default vs Client Option'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-kZZmhjrfx9E/Thv1kNoQuGI/AAAAAAAAAkI/Ub3h36wj8Wo/s72-c/BDCModelClientVsDefault.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5217046160330504568</id><published>2011-07-07T16:50:00.001+10:00</published><updated>2011-07-07T16:52:37.525+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Reverse Engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='Reflection'/><title type='text'>Not all Reflection Tools (or Obfuscators) Are Created Equal</title><content type='html'>I had a client last week in Melbourne who wanted to salvage some code from an existing SharePoint 2010 implementation. As long as it wasn't obfuscated, then I thought there would be no problems at all. &lt;br /&gt;&lt;br /&gt;Red Gate's (previously Lutz Roeder's) Reflector&amp;nbsp;is designed for just a situation - and I'd recently purchased the awesome VS PRO version (which is &lt;strong&gt;phenomenal &lt;/strong&gt;lets you step and debug through other people's applications!).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;However, when I tried to open up the assemblies in Reflector or on ILDASM, it&amp;nbsp;appeared to indeed be obfuscated - by the &lt;a href="http://www.red-gate.com/products/dotnet-development/smartassembly/"&gt;Smart Assembly&lt;/a&gt; tool from Red Gate.&lt;br /&gt;&lt;br /&gt;Typically, the obfuscated code will be shown with an error or garbled characters. e.g. "&lt;span style="color: red;"&gt;This item is obfuscated and can not be translated&lt;/span&gt;." - as below: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nVLvlZPnNjI/ThVMGhSDfyI/AAAAAAAAAj8/NOXHv-uA3DE/s1600/ObfuscatedCodeInReflectorNet.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" m$="true" src="http://3.bp.blogspot.com/-nVLvlZPnNjI/ThVMGhSDfyI/AAAAAAAAAj8/NOXHv-uA3DE/s320/ObfuscatedCodeInReflectorNet.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you try and open it in ILDASM, it throws an exception as below:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lVCOAJMaBgM/ThVRb_XxR4I/AAAAAAAAAkA/6BZG4BLFQZk/s1600/ILDASM_Obfuscated.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" m$="true" src="http://2.bp.blogspot.com/-lVCOAJMaBgM/ThVRb_XxR4I/AAAAAAAAAkA/6BZG4BLFQZk/s320/ILDASM_Obfuscated.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;This is because the Assembly has the CompilerServices "&lt;em&gt;SuppressIldasmAttribute&lt;/em&gt;" applied to it.&lt;br /&gt;&lt;br /&gt;However, if you open up the assembly with&amp;nbsp;the new tool JetBrains &lt;a href="http://www.jetbrains.com/decompiler/"&gt;dotPeek&lt;/a&gt; (the makers of &lt;strong&gt;Resharper&lt;/strong&gt;), then you will be able to see the source code&amp;nbsp;- even of those allegedly obfuscated methods and properties.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-I8RwUvPfNHw/ThVV_ovB9GI/AAAAAAAAAkE/YPiPDm4CcMQ/s1600/PropertyIdProperty.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" m$="true" src="http://1.bp.blogspot.com/-I8RwUvPfNHw/ThVV_ovB9GI/AAAAAAAAAkE/YPiPDm4CcMQ/s320/PropertyIdProperty.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I'm not sure whether Red Gate deliberately set a flag inside Reflector when they purchased it from Lutz Roeder - but it seems like a few shortcuts were taken with the obfuscation engine.&lt;br /&gt;&lt;br /&gt;So be warned - not all Reflectors and not all Obfuscation methods are created equal.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5217046160330504568?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5217046160330504568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5217046160330504568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5217046160330504568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5217046160330504568'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/07/not-all-reflection-tools-or-obfuscators.html' title='Not all Reflection Tools (or Obfuscators) Are Created Equal'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-nVLvlZPnNjI/ThVMGhSDfyI/AAAAAAAAAj8/NOXHv-uA3DE/s72-c/ObfuscatedCodeInReflectorNet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6849143206043086557</id><published>2011-06-15T16:40:00.000+10:00</published><updated>2011-06-15T16:40:47.546+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise for Microsoft SharePoint and SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>Duet Enterprise Integration - Fix for  "System.ArgumentException: An item with the same key has already been added due to Extra Content Type Headers" in SharePoint 2010 ULS Logs</title><content type='html'>If you're not aware, &lt;strong&gt;Duet Enterprise (&lt;a href="http://www.duet.com/"&gt;http://www.duet.com/&lt;/a&gt;) &lt;/strong&gt;is an integration framework and infrastructure for providing SAP to SharePoint integration - of task lists, SAP workflows, SAP reports, SAP security and&amp;nbsp;SAP data (through SharePoint BCS).&lt;br /&gt;&lt;br /&gt;I recently had an issue with a Duet Enterprise deployment for one of my clients. When retrieving data, the out of the box web parts were failing and dropping the following Exception in the SharePoint 2010 ULS Logs:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Microsoft Sans Serif&amp;quot;, &amp;quot;sans-serif&amp;quot;; font-size: 8.5pt; mso-ansi-language: EN-AU; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-AU; mso-fareast-theme-font: minor-latin;"&gt;&lt;span style="color: red;"&gt;System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&amp;gt; System.ArgumentException: &lt;strong&gt;An item with the same key has already been added&lt;/strong&gt;. Server stack trace: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.ContentTypeHeader.ParseValue() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.ContentTypeHeader.get_MediaType() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.XmlMtomReader.ReadRootContentTypeHeader(ContentTypeHeader header, Encoding[] expectedEncodings, String expectedType) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.XmlMtomReader.Initialize(Stream stream, String contentType, XmlDictionaryReaderQuotas quotas, Int32 maxBufferSize) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.XmlMtomReader.SetInput(Stream stream, Encoding[] encodings, String contentType, XmlDictionaryReaderQuotas quotas, Int32 maxBufferSize, OnXmlDictionaryReaderClose onClose) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Xml.XmlDictionaryReader.CreateMtomReader(Byte[] buffer, Int32 offset, Int32 count, Encoding[] encodings, String contentType, XmlDictionaryReaderQuotas quotas, Int32 maxBufferSize, OnXmlDictionaryReaderClose onClose) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.MtomMessageEncoder.MtomBufferedMessageData.TakeXmlReader() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.BufferedMessageData.GetMessageReader() &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.MtomMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.HttpInput.DecodeBufferedMessage(ArraySegment`1 buffer, Stream inputStream) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(Stream inputStream) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception&amp;amp; requestException) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) &lt;br /&gt;at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at [0]: &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&amp;amp; msgData, Int32 type) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at BCSServiceProxy.IWXManageCustomerIn.FindCustomerByElements(FindCustomerByElementsRequest request) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at BCSServiceProxy.WXManageCustomerInClient.BCSServiceProxy.IWXManageCustomerIn.FindCustomerByElements(FindCustomerByElementsRequest request) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at BCSServiceProxy.WXManageCustomerInClient.FindCustomerByElements(BPCCustGetAll BPCCustGetAll) -&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;-- End of inner exception stack trace --- &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp;amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;at Microsoft.SharePoint.BusinessData.SystemSpecific.Wcf.WcfSystemUtility.Execute(Object[] args)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DuZIlFxb4J0/TdHQXcsGNcI/AAAAAAAAAjg/9xaO2N-RZVo/s1600/SAPDuetIssue.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" j8="true" src="http://3.bp.blogspot.com/-DuZIlFxb4J0/TdHQXcsGNcI/AAAAAAAAAjg/9xaO2N-RZVo/s400/SAPDuetIssue.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I immediately thought that it was something wrong with the data. Because Duet uses HTTPS &amp;amp; SSL for all communications between SAP Netweaver 7.02+ and SharePoint 2010, I had to decrypt the traffic to work out what was going on. Running the calls on the SAP site returned blank results. To get WireShark (&lt;a href="http://www.wireshark.org/"&gt;http://www.wireshark.org/&lt;/a&gt;) decrypting the traffic we had to generate a certificate in SAP with a private key. We had to get the key out in PKCS#12 format and then convet it to the .PEM format that wireshark accepts - similar to what is desribed here:&lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;a href="http://htluo.blogspot.com/2009/01/decrypt-https-traffic-with-wireshark.html"&gt;&lt;span style="color: purple; font-family: Calibri;"&gt;http://htluo.blogspot.com/2009/01/decrypt-https-traffic-with-wireshark.html&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;We used "sapgenpse" in SAP to generate the certificate with the private key - as per the screenshot below:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-OsktPrcXxBM/TdHYVWVpDSI/AAAAAAAAAjk/0PE9zS5chPM/s1600/sapgenpse.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" j8="true" src="http://1.bp.blogspot.com/-OsktPrcXxBM/TdHYVWVpDSI/AAAAAAAAAjk/0PE9zS5chPM/s400/sapgenpse.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;Once the key was set in WireShark preferences, you will see many of the packets being processed being marked as green. You can then right click on them and choose "Follow SSL Stream" on your web request - and you will see the decrypted version of your HTTPS traffic. &lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 0pt;"&gt;Turns out, the issue was with SAP retuning &lt;strong&gt;duplicate Content headers in the response to SharePoint&lt;/strong&gt; BCS (as per the screenshot).&lt;br /&gt;&lt;br /&gt;There is a SAP Note to fix this very issue - "SAP Note &lt;strong&gt;1539888 &lt;/strong&gt;- Composite Note -Duet Enterprise Installation Wizard". You will need a SAP Service Market place to log on to get this note.&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6849143206043086557?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6849143206043086557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6849143206043086557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6849143206043086557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6849143206043086557'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/06/duet-enterprise-integration-fix-for.html' title='Duet Enterprise Integration - Fix for  &quot;System.ArgumentException: An item with the same key has already been added due to Extra Content Type Headers&quot; in SharePoint 2010 ULS Logs'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-DuZIlFxb4J0/TdHQXcsGNcI/AAAAAAAAAjg/9xaO2N-RZVo/s72-c/SAPDuetIssue.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8538158656024745275</id><published>2011-06-15T16:19:00.006+10:00</published><updated>2011-06-15T16:27:45.698+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>Duet Enterprise - [ERROR] - "Cannot Merge Contents of LobSystem (External System) with Name 'Account' as it appears to be different from preexisting LobSystem in the current load context." - Fix</title><content type='html'>When using Duet Enterprise (for SAP and SharePoint 2010 Integration) you may receive the following exception when importing Duet Business Connectivity Service Models (as per &lt;a href="http://technet.microsoft.com/en-us/library/gg394164.aspx"&gt;http://technet.microsoft.com/en-us/library/gg394164.aspx&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-1zUaQ2w6Rhw/TfhOmlSpTQI/AAAAAAAAAj4/_rFlNHW4m9M/s1600/DuetException.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://2.bp.blogspot.com/-1zUaQ2w6Rhw/TfhOmlSpTQI/AAAAAAAAAj4/_rFlNHW4m9M/s640/DuetException.jpg" t8="true" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;&lt;em&gt;"Duet Enterprise - [ERROR] - Cannot Merge Contents of LobSystem (External System) with Name 'Account' as it appears to be different from preexisting LobSystem in the current load context.".&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This may occur even after you've used Duet to remove all of the models with the commandline &lt;strong&gt;DuetConfig.exe /RemoveBDC&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;You can fix this issue by going to:&lt;br /&gt;&lt;br /&gt;This may occur even after you've used Duet to remove all of the models with the commandline DuetConfig.exe /RemoveBDC.&lt;br /&gt;&lt;br /&gt;SharePoint Central Administration - Your Business Connectivity Services (BCS) Service Application - Manage&lt;br /&gt;Then:&lt;br /&gt;&lt;br /&gt;1) Choose "Models" in the "View" dropdown and remove any Duet models if they still exist&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;2) Choose "External Systems" and Remove any Duet External systems (this is the external system referred to in the error).&lt;br /&gt;&lt;br /&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-3cAdoaoPce0/TfhNz8QB5EI/AAAAAAAAAj0/4lZqmWF5BSE/s1600/BCSViewExternalSystems.jpg" imageanchor="1" style="cssfloat: left; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://2.bp.blogspot.com/-3cAdoaoPce0/TfhNz8QB5EI/AAAAAAAAAj0/4lZqmWF5BSE/s400/BCSViewExternalSystems.jpg" t8="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;You should now successfully be able to import&amp;nbsp;the Duet Enterprise 1.0&amp;nbsp;out of the box&amp;nbsp;Models.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8538158656024745275?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8538158656024745275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8538158656024745275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8538158656024745275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8538158656024745275'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/06/duet-enterprise-error-cannot-merge.html' title='Duet Enterprise - [ERROR] - &quot;Cannot Merge Contents of LobSystem (External System) with Name &apos;Account&apos; as it appears to be different from preexisting LobSystem in the current load context.&quot; - Fix'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-1zUaQ2w6Rhw/TfhOmlSpTQI/AAAAAAAAAj4/_rFlNHW4m9M/s72-c/DuetException.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6260115950004575889</id><published>2011-06-08T16:16:00.000+10:00</published><updated>2011-06-08T16:16:35.814+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>SharePoint 2010 Business Connectivity Services (BCS) - Exception when adding new Entities - "Null was returned to FindSpecific (Read Item operation)" - Fix</title><content type='html'>Scenario: You've set up SharePoint 2010 External Content Types and you receive the following exception when adding a new item to your BCS list:&lt;br /&gt;&lt;br /&gt;&lt;span lang="EN-AU"&gt;&lt;span style="color: red;"&gt;&lt;em&gt;Form submission failed. (User: DOMAIN\UserName, Form Name: Template, IP: , Request: &lt;/em&gt;&lt;/span&gt;&lt;a href="http://servername-ids009v/sites/Duet/Lists/Leave"&gt;&lt;span style="color: red;"&gt;&lt;em&gt;http://servername/sites/Duet/Lists/Leave&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="color: red;"&gt;&lt;em&gt; Request/Item/newifs.aspx?RootFolder=/sites/Duet/Lists/Leave Request&amp;amp;IsDlg=1#, Form ID: urn:schemas-microsoft-com:office:infopath:entity:-AutoGen-2011-06-08T05:13:33:61Z, Type: DataAdapterException, Exception Message: The server responded with the following error: Null was returned to FindSpecific (Read Item operation).. Null was returned to FindSpecific (Read Item operation).)&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then your Specific Finder (e.g. "GetLeaveRequestById") most likely is not handling calls when an object is newly created (e.g. the Primary&amp;nbsp;Key of the BCS Entity is either blank or 0). Basically, when a new object is created, it will be re-queried by the BCS engine - causing the exception.&lt;br /&gt;&lt;br /&gt;To fix, you just have to change your BCS Read Item (e.g. GetLeaveRequestById) to handle a call for newly created objects when the Identifier is Blank or zero - and return a placeholder object with initialized fields.&lt;br /&gt;&lt;br /&gt;This will appease BCS and allow it to continue to re-render your external entity list (from SAP services or otherwise)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6260115950004575889?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6260115950004575889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6260115950004575889' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6260115950004575889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6260115950004575889'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/06/sharepoint-2010-business-connectivity.html' title='SharePoint 2010 Business Connectivity Services (BCS) - Exception when adding new Entities - &quot;Null was returned to FindSpecific (Read Item operation)&quot; - Fix'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-4894600119664115128</id><published>2011-06-08T15:11:00.001+10:00</published><updated>2011-06-08T15:12:32.890+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Connectivity Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enteprise'/><title type='text'>SharePoint 2010 - Setting the Title for your External Content Type (esp for Display of Friendly name in BCS Associations)</title><content type='html'>A simple tip for modifying External Content Types in SharePoint Designer 2010 - if you have an external content type (e.g. talking to SAP via Duet Enterprise) - and you want to control the Display name that is shown in the Pickers, you need to change the Title of your External Content Type. You can do this by clicking on the Field you want to use as the Display name, and then click the "Set as Title" Ribbon Button under the field group. See below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jrynMHZlyWw/Te8Dw9zW6II/AAAAAAAAAjw/qyFuR-iStyc/s1600/BCSAssociations.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://4.bp.blogspot.com/-jrynMHZlyWw/Te8Dw9zW6II/AAAAAAAAAjw/qyFuR-iStyc/s400/BCSAssociations.jpg" t8="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;I was half expecting a context menu on right click for this functionality - but the UI designer at Microsoft has chosen the ribbon option for this functionality (unlike some other areas of SharePoint Designer).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-4894600119664115128?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/4894600119664115128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=4894600119664115128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4894600119664115128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4894600119664115128'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/06/setting-title-for-your-external-content.html' title='SharePoint 2010 - Setting the Title for your External Content Type (esp for Display of Friendly name in BCS Associations)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-jrynMHZlyWw/Te8Dw9zW6II/AAAAAAAAAjw/qyFuR-iStyc/s72-c/BCSAssociations.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3871574856001774733</id><published>2011-05-04T19:59:00.001+10:00</published><updated>2011-05-04T20:16:47.030+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Reporting Services 2008'/><title type='text'>Exception when Browsing Locally to Report Server/Creating an new TFS Project on Local Machine</title><content type='html'>If you have a Report Server e.g. as Part of a TFS 2010 Setup, and attempt to access your site locally (e.g. &lt;a href="https://servername/Reports/"&gt;https://servername/Reports/&lt;/a&gt;)&amp;nbsp;, you may get the following exception:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;User 'DOMAIN\UserName' does not have required permissions. Verify that sufficient permissions have been granted and Windows User Account Control (UAC) restrictions have been addressed. &lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;When creating a new project in TFS, you may also have the same problem accessing the Report server when the TFS 2010 new project wizard attempts to create a new reporting site. You may even be able to access the site remotely but just not on the local box.&lt;br /&gt;To fix the problem, you can just go to Internet Explorer&amp;gt;Tools&amp;gt;Options&amp;gt;Trusted Sites&amp;gt;Sites and add the site experiencing the problems to the Trusted Sites zone. &lt;br /&gt;Full details are here (Point 7 and 8):&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/934164"&gt;http://support.microsoft.com/kb/934164&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note that you will need to restart Visual Studio for it to pick up the above changes in the TFS 2010 new project wizard.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3871574856001774733?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3871574856001774733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3871574856001774733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3871574856001774733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3871574856001774733'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/05/exception-when-browsing-locally-to.html' title='Exception when Browsing Locally to Report Server/Creating an new TFS Project on Local Machine'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6877207025523115683</id><published>2011-05-02T09:30:00.000+10:00</published><updated>2011-05-02T09:30:43.790+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS Remote Portal'/><title type='text'>Integrating TFS 2010 with SharePoint 2010 using SharePoint 2010 Claims Based Authentication Mode</title><content type='html'>I recently attempted to create a TFS 2010 portal against a remote portal in SharePoint 2010. However, if you attempt to create this TFS 2010 Remote portal against a &lt;strong&gt;claims-based authenticated web application&lt;/strong&gt;, you will typically get the following exception:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-M3RYwLJZH-4/TbjNAl3RvyI/AAAAAAAAAjY/ZSR2UPTXF3Q/s1600/TFSProjectPortalClaimsAuthentication.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" i8="true" src="http://4.bp.blogspot.com/-M3RYwLJZH-4/TbjNAl3RvyI/AAAAAAAAAjY/ZSR2UPTXF3Q/s400/TFSProjectPortalClaimsAuthentication.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;TF218017: A Sharepoint Site could not be created for use as the team project portal. The following error ocurred: Server was unable to process request. --&amp;gt; The User does not exists or is not unique --&amp;gt; The User does not exists or is not unique.&lt;/span&gt;&lt;span style="color: black;"&gt;The problem is the same as the one experienced here:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/tfsgeneral/thread/bd396f15-02d7-4431-9d75-005c8b63007e/"&gt;http://social.msdn.microsoft.com/Forums/en-US/tfsgeneral/thread/bd396f15-02d7-4431-9d75-005c8b63007e/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The error related to "Unique Users" so I had a look in the SharePoint Content database to see if there were duplicate users with the following query:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select * from userinfo &lt;br /&gt;&lt;br /&gt;Indeed there are two active users with my loginid for the one web application. Both were active. &lt;br /&gt;One loging was named (in the tp_Login column of the table) as you'd expect as:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;DOMAINNAME\LoginName&lt;/em&gt;&lt;br /&gt;Whereas the other was named with an unusual prefix "i:0#.w" like so:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;i:0#.w&lt;/span&gt;|&lt;/strong&gt;&lt;em&gt;DOMAINNAME&lt;/em&gt;\&lt;em&gt;LoginName&lt;/em&gt; &lt;br /&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp; &lt;br /&gt;However, this didn't present a problem when creating sites within the site collection through the normal SharePoint 2010 user interface. I&amp;nbsp;created sites with both my account, the setup account and service account&amp;nbsp;-&amp;nbsp;there were no errors releated to uninque users at all.&lt;br /&gt;&lt;br /&gt;While this "&lt;strong&gt;i:0#.w&lt;/strong&gt;" prefix on logins is not documented, it identifies a login as using claims-based authentication. Thing is that it doesn't make sense that there would be&amp;nbsp;both&amp;nbsp;claims-based and classic users both active for the one site collection - unless that behaviour is by design for backwards compatability. My theory - on the TFS side, the &lt;strong&gt;SharePoint object model is unexpectedly (from the TFS 2010 perspective) returning 2 accounts against &lt;/strong&gt;the one login. &lt;br /&gt;&lt;br /&gt;I used Wireshark and Fiddler to trace the calls that TFS Team explorer is trying to make when creating project sites, and it it was making a call to &lt;a href="https://servername/_vti_bin/TeamFoundationIntegrationService.asmx"&gt;https://servername/_vti_bin/TeamFoundationIntegrationService.asmx&lt;/a&gt;. It is making a call to the "CheckUrl" method. An internal error (500) is thrown by the webservice - as per the screenshot of the Fiddler trace:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-DOO2pBLyG2o/TbkP0HGhCKI/AAAAAAAAAjc/rjXN85EPig4/s1600/SOAPFault.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" j8="true" src="http://2.bp.blogspot.com/-DOO2pBLyG2o/TbkP0HGhCKI/AAAAAAAAAjc/rjXN85EPig4/s320/SOAPFault.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Upon further investigation, the physical webservice is in the following location on the SharePoint server: &lt;br /&gt;%Program Files%\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\TeamFoundationIntegrationService.asmx&lt;br /&gt;&lt;br /&gt;Looking inside the asmx, it points to the Microsoft.TeamFoundation.SharePoint.TeamFoundationIntegrationService class in the &lt;br /&gt;Microsoft.TeamFoundation.SharePoint.dll&amp;nbsp;assembly.&lt;br /&gt;&lt;br /&gt;The SharePoint 2010 ULS Logs have only very basic information reiterating the error in Team Explorer - "The user does not exist or is not unique".&lt;br /&gt;Looking for the CheckUrl method definition in Reflector, it runs &lt;strong&gt;many checks using the Office 12 object model &lt;/strong&gt;- but nothing clearly erroneous in the code warranting further investigation. We could run something like the Visual Studio.NET plugin for reflector to step through the code - but I didn't think it was worthwhile continuing investigation into the problematic calls in the TFS object model.&lt;br /&gt;&lt;span style="color: black;"&gt;I had another search and according to "Chris Co" from Microsoft (&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/tfssetup/thread/a2665904-ec35-4dff-a809-69c2c9316378"&gt;http://social.msdn.microsoft.com/Forums/en-US/tfssetup/thread/a2665904-ec35-4dff-a809-69c2c9316378&lt;/a&gt;) &lt;/span&gt;&lt;span style="color: red;"&gt;"This is something the product group is thinking about supporting in the future, but unfortunately, we currently do not support and will not be supported in SP1."&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;So for now, if you want your TFS Portal to be hosted in SharePoint 2010, your SharePoint 2010 web application &lt;strong&gt;will need to use Classic rather than claims authentication.&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6877207025523115683?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6877207025523115683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6877207025523115683' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6877207025523115683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6877207025523115683'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/05/integrating-tfs-2010-with-sharepoint.html' title='Integrating TFS 2010 with SharePoint 2010 using SharePoint 2010 Claims Based Authentication Mode'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-M3RYwLJZH-4/TbjNAl3RvyI/AAAAAAAAAjY/ZSR2UPTXF3Q/s72-c/TFSProjectPortalClaimsAuthentication.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7783866338238210008</id><published>2011-04-20T16:46:00.000+10:00</published><updated>2011-04-20T16:46:50.472+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Load Tests'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Extraction Rule'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Web Tests'/><title type='text'>Custom Extraction Rules for Visual Studio Load Tests - Dealing with Dynamic Control Identifiers</title><content type='html'>I&amp;nbsp;was recently commissioned to create and fix up several Visual Studio 2008 Load Tests for one of my clients.&amp;nbsp;There were some questions raised about the validity and accuracy of the load test results - so I was brought in to do a "Load Test Audit".&lt;br /&gt;&lt;br /&gt;I started by creating some data validation scripts which confirmed that data was being updated correctly. Unexpectedly, even though the tests were running without failure, the number of records affected in the database was completely different to the anticipated results.&lt;br /&gt;&lt;br /&gt;Upon investigation, I found several issues which caused the Load tests to intermittently or "silently" fail (i.e. tests passed, but exceptions were logged in the backend of the custom application). There were several problems I found. I cover two of them below:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROBLEM 1:&lt;/strong&gt;&lt;br /&gt;One of the problems is that one of the buttons in the recorded webtest would sometimes&amp;nbsp;not be correctly triggered. Consequently all subsequent web test requests in that Load Test scenario would fail. &lt;br /&gt;&lt;br /&gt;Turns out, there was a link button in one of the ASP.NET Web Parts rendered as part of a GridView - and the id of the control would actually change based on the number of records included in the grid. &lt;br /&gt;&lt;br /&gt;Consequently, in most cases there was 1 record in the grid so the "lnkAdd" button was "lnkAdd1". This matched what was recorded in the Visual Studio Webtest. However, the load test would fail when there were a larger number of records as Visual Studio couldn't find the "lnkAddX" button. &lt;br /&gt;&lt;br /&gt;To resolve this, the simplest way to dynamically determine the id of the dynamic control was to use a custom extraction rule that sets a context value for use in subsequent requests. Like so: &lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public class GetAddButtonId : ExtractionRule&lt;br /&gt;    {&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Add button name. TODO: Add defensive code&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="sender" /&gt;&lt;/param&gt;/// &lt;param name="e" /&gt;&lt;/param&gt;public override void Extract(object sender, ExtractionEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            e.Success = true;&lt;br /&gt;            if (!string.IsNullOrEmpty(e.Response.BodyString))&lt;br /&gt;            {&lt;br /&gt;                Match value = Regex.Match(e.Response.BodyString, @"ctl00\$ContentPlaceHolder1.[^&amp;gt;]*?grdScheduleChangeResults\$.[^&amp;gt;]*?\$lnkAdd");&lt;br /&gt;                if (value.Success)&lt;br /&gt;                {&lt;br /&gt;                    this.ContextParameterName = "AddButtonId";&lt;br /&gt;                    if (!e.WebTest.Context.ContainsKey("AddButtonId"))&lt;br /&gt;                    {&lt;br /&gt;                        e.WebTest.Context.Add("AddButtonId", value.Groups[0].Value);&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        e.WebTest.Context["AddButtonId"] = value.Groups[0].Value;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I added this Custom Extraction Rule as part of the web test, updated subsequent requests to use the Context value for the control name -&amp;nbsp;and the issues were resolved. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;PROBLEM 2:&lt;/strong&gt;&lt;br /&gt;There were also issues with the Validation rules in the Load Test - as the tests were running without failure, but they were actually just hitting the CustomError.aspx page (this occurs when there's an exception).&amp;nbsp;I had to add a new Web Test Validation rules as below:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public override IEnumerator&lt;webtestrequest&gt; GetRequestEnumerator()&lt;br /&gt;        {&lt;br /&gt;            if ((this.Context.ValidationLevel &amp;gt;= Microsoft.VisualStudio.TestTools.WebTesting.ValidationLevel.High))&lt;br /&gt;            {&lt;br /&gt;                if (!Context.ContainsKey("IgnoreErrors") || (Context["IgnoreErrors"].ToString() != null &amp;amp;&amp;amp; bool.Parse(Context["IgnoreErrors"].ToString())))&lt;br /&gt;                {&lt;br /&gt;                    ValidationRuleFindText validationRule2 = new ValidationRuleFindText();&lt;br /&gt;                    validationRule2.FindText = "Unable to perform operation";&lt;br /&gt;                    validationRule2.IgnoreCase = true;&lt;br /&gt;                    validationRule2.UseRegularExpression = false;&lt;br /&gt;                    validationRule2.PassIfTextFound = false;&lt;br /&gt;                    this.ValidateResponse += new EventHandler&lt;validationeventargs&gt;(validationRule2.Validate);&lt;br /&gt;&lt;br /&gt;                    &lt;br /&gt;                    ValidationRuleFindText ErrorSummary_Validation = new ValidationRuleFindText();&lt;br /&gt;                    ErrorSummary_Validation.FindText = "ErrorSummary";&lt;br /&gt;                    ErrorSummary_Validation.IgnoreCase = true;&lt;br /&gt;                    ErrorSummary_Validation.UseRegularExpression = false;&lt;br /&gt;                    ErrorSummary_Validation.PassIfTextFound = false;&lt;br /&gt;                    this.ValidateResponse += new EventHandler&lt;validationeventargs&gt;(ErrorSummary_Validation.Validate);&lt;br /&gt;&lt;br /&gt;                    //'An open change request already exists&lt;br /&gt;&lt;br /&gt;                    //Wasn't detecting custom error page as issue in test.&lt;br /&gt;                    ValidationRuleFindText customError_Validation = new ValidationRuleFindText();&lt;br /&gt;                    customError_Validation.FindText = "CustomError.aspx";&lt;br /&gt;                    customError_Validation.IgnoreCase = true;&lt;br /&gt;                    customError_Validation.UseRegularExpression = false;&lt;br /&gt;                    customError_Validation.PassIfTextFound = false;&lt;br /&gt;                    this.ValidateResponse += new EventHandler&lt;validationeventargs&gt;(customError_Validation.Validate);&lt;br /&gt;&lt;br /&gt;                    ValidationRuleFindText callback = new ValidationRuleFindText();&lt;br /&gt;                    callback.FindText = "Invalid postback or callback argument";&lt;br /&gt;                    callback.IgnoreCase = true;&lt;br /&gt;                    callback.UseRegularExpression = false;&lt;br /&gt;                    callback.PassIfTextFound = false;&lt;br /&gt;                    this.ValidateResponse += new EventHandler&lt;validationeventargs&gt;(callback.Validate);&lt;br /&gt;&lt;br /&gt;                    this.StopOnError = true;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;Hope this helps someone in the future when they are troubleshooting their Visual Studio Web Tests or Load Tests!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7783866338238210008?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7783866338238210008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7783866338238210008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7783866338238210008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7783866338238210008'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/04/custom-extraction-rules-for-visual.html' title='Custom Extraction Rules for Visual Studio Load Tests - Dealing with Dynamic Control Identifiers'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8845651796549974290</id><published>2011-04-08T13:58:00.009+10:00</published><updated>2011-05-06T13:32:48.170+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Project Estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='Estimation'/><title type='text'>DDK's Guide to the Estimation of IT Projects</title><content type='html'>As an Architect and the .NET Principal at Oakton NSW, I have to do my fair share of Estimates and Proposals. I am also often asked to review and revise other peoples estimates - to "Quality Stamp" them so to speak. There are some common things that I pick up on - hence the driver behind this blog post.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Summary Diagram of the DDK Estimation Technique:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-dZnbD5CyEvs/TZ6HU-4W-KI/AAAAAAAAAjU/1vRbezwi8fI/s1600/DDKEstimationTechnique0-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="483px" r6="true" src="http://2.bp.blogspot.com/-dZnbD5CyEvs/TZ6HU-4W-KI/AAAAAAAAAjU/1vRbezwi8fI/s640/DDKEstimationTechnique0-1.jpg" width="640px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;Here are some of the important things you should consider when developing estimates:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;1. &lt;strong&gt;Estimate from the bottom up rather than from the top down&lt;/strong&gt;. The focus and detail of this approach helps you to substantiate your estimates to others and show you've used due diligence in arriving at your estimate. A detailed function point analysis (FPA) is ideal when trying to minimise risk as much as possible (especially for fixed cost projects).&lt;br /&gt;2. There are &lt;strong&gt;2 critical variables which can make a project take much longer than expected&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;and estimated&lt;/strong&gt;. If you have these components, you need to &lt;strong&gt;increase your estimate to more than you expect&lt;/strong&gt;:&lt;br /&gt;&amp;nbsp; a. The larger and more complex the project, the more likely it is to take longer than expected. &lt;br /&gt;&amp;nbsp; b. The more new technologies or new techniques involved, the more likely it is to take longer than expected&lt;br /&gt;&lt;br /&gt;3. Communicate with and update the client regularly – &lt;strong&gt;Don’t be afraid to re-estimate your tasks&lt;/strong&gt; and let the client know if things will take longer or shorter than expected. The earlier they know, the earlier corrective action can be taken.&lt;br /&gt;&lt;br /&gt;4. &lt;strong&gt;Larger projects are harder to estimate&lt;/strong&gt;. Only estimate small components of a project if possible – don’t estimate all releases. Deliver and estimate in increments if the client/contracts allow. &lt;br /&gt;&lt;br /&gt;5. Make sure you consider the &lt;strong&gt;following components in your &lt;span style="color: red;"&gt;Estimation Checklist&lt;/span&gt;&lt;/strong&gt; before giving it to the client:&lt;br /&gt;&amp;nbsp; a. End User Documentation&lt;br /&gt;&amp;nbsp; b. System Documentation &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Rollback Plans&lt;br /&gt;&amp;nbsp; &amp;nbsp; ii. Non Functional Requirements (NFR)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii. Technical Design&amp;nbsp;&amp;amp; Specifications&lt;br /&gt;&amp;nbsp; &amp;nbsp; iv. Functional Design &amp;amp; Specifications&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; v. Establishing Metrics (e.g. what performance is expected on what servers and with what data load)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vi. Test Plans&lt;br /&gt;&amp;nbsp; &amp;nbsp; vii. Test Scripts&lt;br /&gt;&amp;nbsp; c. Testing&lt;br /&gt;&amp;nbsp; d. Training and Change Management (you can't just give someone an application and expect them to start using it effectively!)&lt;br /&gt;&amp;nbsp; e. User Acceptance Testing&lt;br /&gt;&amp;nbsp; f. Integration Testing (esp when integrating with Legacy Systems)&lt;br /&gt;&amp;nbsp; g. Deployment Activities and Productionizing Systems&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.&amp;nbsp;Especially with complex deployments. These deployment activities are typically ongoing rather than once off.&lt;br /&gt;&amp;nbsp; h. Meetings Drag Factors such as regular Meetings and Discussions. Team leaders and architects need a drag factor SCRUM meetings and requirement gathering meetings.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Triage Meetings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii. Code Reviews&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii. Level 2 Reviews by Testers e.g. For one of our projects, it took&amp;nbsp;an average of 45 minutes per&amp;nbsp;TFS work item/ticket. &lt;br /&gt;&amp;nbsp; i. Focus Groups&lt;br /&gt;&amp;nbsp; j. Licenses &lt;br /&gt;&amp;nbsp; k. Configuration &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Third Party Components&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii. Firewall Configuration&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii. Database Configuration&lt;br /&gt;&amp;nbsp; l. Data Migration&lt;br /&gt;&amp;nbsp; m. Handovers (Including Warranty Periods)&lt;br /&gt;&amp;nbsp; n. You need to anticipate who is developing it. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Offshore Models/Engagements – have to spend 2-3 times the effort in non-development activities such as coordination, “hand-holding” and quality assurance when your team is overseas. You also need to spend much more time on specification documents to avoid communication issues.&lt;br /&gt;&amp;nbsp; o. Temper your Optimism by considering different scenarios&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Best Case&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ii. Worst Case &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; iii. Likely Case Scenario&lt;br /&gt;&amp;nbsp; p. If uncertainty on a project is High, add an uncertainty multiplier to your estimate&lt;br /&gt;&amp;nbsp; q. Don’t estimate more than 8 hours per day.&lt;br /&gt;&amp;nbsp; r. Budget time for Performance Testing&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i. Time for Load Tests&lt;br /&gt;&lt;br /&gt;6. If possible, do a &lt;strong&gt;Proof of Concept (PoC)&lt;/strong&gt; before providing the estimates (or just estimate the PoC) – especially when using new combinations of technologies.&lt;br /&gt;&lt;br /&gt;7. &lt;strong&gt;Learn from Historical Data&lt;/strong&gt;. Try to learn from similar projects and how the estimates compared with the actuals. Use your company portal to discover estimates and ask other people in your company for similar estimates that they did. &lt;br /&gt;&lt;br /&gt;8. &lt;strong&gt;Sanity Check your estimates&lt;/strong&gt;. i.e. Have your estimates peer-reviewed to help you ensure consistency and coverage in your estimates.&lt;br /&gt;&lt;br /&gt;9. &lt;strong&gt;Cross-Check your estimates&lt;/strong&gt;. If you can convince all stakeholders that the estimate is valid and establish buy-in to that estimate, you have&amp;nbsp;the basis of a&amp;nbsp;good estimate. &lt;br /&gt;&lt;br /&gt;10. Don’t underestimate Non-Programming/Infrastructure activities. &lt;br /&gt;&lt;br /&gt;11. Don’t change estimates if possible if they are based on a solid agreement or understanding. Instead, try and change the commercial arrangements surrounding the estimate. E.g. don’t change the estimates unless they are proven unreasonable – change the rate if possible.&lt;br /&gt;&lt;br /&gt;12. All estimates are guesses – try and reduce the uncertainty – &lt;strong&gt;but you cannot remove uncertainty completely&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;13. Try to make your &lt;strong&gt;estimates from a fully informed standpoint - &lt;/strong&gt;the same as a General shouldn't make strategic decisions in the fog of war. Request and Review as many materials (including scribbled diagrams and requirements documents) as time allows. The more you discuss your understanding of the project and talk to the end users, the more likely you are to make an informed estimate. Again, this allows you to back up your&amp;nbsp;estimates to all stakeholders. If there are factors in the project that are &lt;strong&gt;particularly unclear or uncertain, add an "uncertainty" multiplier&lt;/strong&gt; on the item. Encourage the client to help you clear up this uncertainty if possible.&lt;br /&gt;&lt;br /&gt;14. &lt;strong&gt;Use the right tools&lt;/strong&gt;. Microsoft Project is a good start. Learn how to use it properly - plus it can then create and update developer work items for you in Microsoft Team Foundation Server (TFS)&amp;nbsp; when you are ready to start work.&lt;br /&gt;&lt;br /&gt;15. Don't forget that &lt;strong&gt;external dependencies &lt;/strong&gt;(e.g. a 3rd party is creating web services for you, waiting on documentation) will slow the project down. Ideally start the project when work you depend on is complete - otherwise you'll need to factor downtime into your budget, estimates (an expected&amp;nbsp;"downtime" item) and estimate assumptions.&lt;br /&gt;&lt;br /&gt;Any thoughts or comments on this guide and checklist are welcome - I will update the list based on feedback.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8845651796549974290?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8845651796549974290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8845651796549974290' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8845651796549974290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8845651796549974290'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/04/ddks-guide-to-estimation-for-it.html' title='DDK&apos;s Guide to the Estimation of IT Projects'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dZnbD5CyEvs/TZ6HU-4W-KI/AAAAAAAAAjU/1vRbezwi8fI/s72-c/DDKEstimationTechnique0-1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3227654127638466777</id><published>2011-04-07T19:38:00.001+10:00</published><updated>2011-04-07T20:23:12.001+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='MCP'/><title type='text'>I'm now a SharePoint 2010 Microsoft Certified Professional Developer (MCPD)</title><content type='html'>I recently passed my 2nd SharePoint 2010 exam (70-573 and now 70-576) - so I'm now officially a SharePoint 2010 MCPD!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2KdMxAZoELY/TZ2QcQTvkVI/AAAAAAAAAjM/NN8amp9mtSY/s1600/MCPD%2528rgb%2529_1350.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" r6="true" src="http://3.bp.blogspot.com/-2KdMxAZoELY/TZ2QcQTvkVI/AAAAAAAAAjM/NN8amp9mtSY/s1600/MCPD%2528rgb%2529_1350.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next step is MCITP (covering the Infrastructure side of the SharePoint equation) and then onto the coveted &lt;b&gt;Microsoft Certified Master (MCM) certification.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The MCM is apparently a challenge to get (involving panel interviews by other MCMs and 3 weeks of training) - and there is only one so far in Australia.&lt;br /&gt;&lt;br /&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3227654127638466777?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3227654127638466777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3227654127638466777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3227654127638466777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3227654127638466777'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/04/im-now-sharepoint-2010-microsoft.html' title='I&apos;m now a SharePoint 2010 Microsoft Certified Professional Developer (MCPD)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-2KdMxAZoELY/TZ2QcQTvkVI/AAAAAAAAAjM/NN8amp9mtSY/s72-c/MCPD%2528rgb%2529_1350.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8393186442933166382</id><published>2011-03-18T09:10:00.002+11:00</published><updated>2011-03-18T09:11:34.447+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Load Tests'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio Web Tests'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Fiddler Tool'/><title type='text'>Using the Fiddler Tool Proxy to Debug Visual Studio Web Tests and Load Tests</title><content type='html'>The Fiddler Tool (&lt;a href="http://www.fiddlertool.com/"&gt;http://www.fiddlertool.com/&lt;/a&gt;) only listens to WinInet traffic by default - so it doesn't normally pick up any traffic which comes from your Visual Studio Web Tests or Load Tests - even when capturing is on. To help debug your Visual Studio tests, you can set the proxy manually within your code so it forces the traffic through the Fiddler proxy:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;//For Fiddler Debugger&lt;br /&gt;this.Proxy = "http://localhost:8888";&lt;br /&gt;WebProxy webProxy = (WebProxy)this.WebProxy;&lt;br /&gt;webProxy.BypassProxyOnLocal = false;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that you should have the System.Net namespace in your usings/Imports statements for the WebProxy class. This also assumes Fiddler is running and is set up to use the default proxy port of 8888.&lt;br /&gt;&lt;br /&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8393186442933166382?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8393186442933166382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8393186442933166382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8393186442933166382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8393186442933166382'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/03/using-fiddler-tool-proxy-to-debug.html' title='Using the Fiddler Tool Proxy to Debug Visual Studio Web Tests and Load Tests'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-4898364781687527199</id><published>2011-02-24T16:45:00.006+11:00</published><updated>2011-02-25T08:03:58.158+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2008'/><title type='text'>TFS 2008 Build Service will not start, with exception: "The underlying connection was closed: An unexpected error occurred on a receive. (type WebException)"</title><content type='html'>Yesterday, the build agent on the TFS 2008 of our client suddently stopped working after a reboot. I was assured that No settings had changed on the server, so it was a bewildering problem. Several errors started to occur in the event logs such as &lt;span style="color: red;"&gt;"Detailed Message: TF224002: An unexpected error has occurred. Exception Message: The underlying connection was closed: An unexpected error occurred on a receive. (type WebException)".&lt;/span&gt; &lt;br /&gt;As a symptom of the problem, the TFS 2008 Build Agents would never initialize and would constantly go to "Unreachable" status on the server. &lt;br /&gt;&lt;br /&gt;The full exception in the event log was as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;TF53010: The following error has occurred in a Team Foundation component or extension:&lt;br /&gt;&lt;br /&gt;Date (UTC): 23/02/2011 11:06:06 PM&lt;br /&gt;Machine: TFS1-MYSERVER&lt;br /&gt;Application Domain: TFSBuildService.exe&lt;br /&gt;Assembly: TfsBuildService, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a; v2.0.50727&lt;br /&gt;Process Details:&lt;br /&gt;  Process Name: TFSBuildService&lt;br /&gt;  Process Id: 6256&lt;br /&gt;  Thread Id: 5132&lt;br /&gt;  Account name: MYDOMAIN\TFSService&lt;br /&gt;&lt;br /&gt;Detailed Message: TF224002: An unexpected error has occurred.&lt;br /&gt;Exception Message: The underlying connection was closed: An unexpected error occurred on a receive. (type WebException)&lt;br /&gt;&lt;br /&gt;Exception Stack Trace:    at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)&lt;br /&gt;   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)&lt;br /&gt;   at Microsoft.TeamFoundation.Client.TeamFoundationSoapProxy.GetWebResponse(WebRequest request)&lt;br /&gt;   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)&lt;br /&gt;   at Microsoft.TeamFoundation.Proxy.BisRegistrationServiceProxyWsdl.GetRegistrationEntries(String toolId)&lt;br /&gt;   at Microsoft.TeamFoundation.Proxy.BisRegistrationProxy.GetRegistrationEntries(String toolId)&lt;br /&gt;   at Microsoft.TeamFoundation.Proxy.BisRegistrationService.RefreshMemoryCache()&lt;br /&gt;   at Microsoft.TeamFoundation.Proxy.BisRegistrationService.RefreshCachesIfNeeded(Boolean direct)&lt;br /&gt;   at Microsoft.TeamFoundation.Proxy.BisRegistrationService.GetRegistrationEntries(String toolId)&lt;br /&gt;   at Microsoft.TeamFoundation.Build.Client.BuildServer.Microsoft.TeamFoundation.Client.ITeamFoundationServerObject.Initialize(TeamFoundationServer tfs)&lt;br /&gt;   at Microsoft.TeamFoundation.Client.TeamFoundationServer.CreateITFSObjectInstance(Assembly assembly, String fullName)&lt;br /&gt;   at Microsoft.TeamFoundation.Client.TeamFoundationServer.GetService(Type serviceType)&lt;br /&gt;   at Microsoft.TeamFoundation.Build.Agent.AgentService.InitializeTeamFoundationServer(String callingAT)&lt;br /&gt;   at Microsoft.TeamFoundation.Build.Agent.AgentService.GetBuildInProgress(String tfsUrl, String teamProject)&lt;br /&gt;   at SyncInvokeGetBuildInProgress(Object , Object[] , Object[] )&lt;br /&gt;   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp;amp; outputs)&lt;br /&gt;   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp;amp; rpc)&lt;br /&gt;   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)&lt;br /&gt;&lt;br /&gt;Inner Exception Details:&lt;br /&gt;&lt;br /&gt;Exception Message: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. (type IOException)&lt;br /&gt;&lt;br /&gt;Exception Stack Trace:    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;br /&gt;   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;br /&gt;   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)&lt;br /&gt;Inner Exception Details:&lt;br /&gt;Exception Message: An existing connection was forcibly closed by the remote host (type SocketException)&lt;br /&gt;Exception Stack Trace:    at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)&lt;br /&gt;   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The problem in our case was that we had (apparently) new problems with our proxy configuration in Internet Explorer (IE). Fiddler had been installed on this machine several months prior to me arriving at the client and it stopped working. I removed all references to Fiddler (port 8888 by default) in the proxy configuration and the build started to work correctly. &lt;br /&gt;&lt;br /&gt;So this is an important reminder that - the Build Agent in TFS 2008 requires local HTTP access to resources. It uses IE proxy settings during every build run. If these are not correct, TFS will cause you absolute grief and fall over left,right and centre.&lt;br /&gt;&lt;br /&gt;Now to the Fiddler problem...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-4898364781687527199?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/4898364781687527199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=4898364781687527199' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4898364781687527199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4898364781687527199'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/02/tfs-2008-build-service-will-not-start.html' title='TFS 2008 Build Service will not start, with exception: &quot;The underlying connection was closed: An unexpected error occurred on a receive. (type WebException)&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1745337336802071273</id><published>2011-01-26T00:31:00.000+11:00</published><updated>2011-01-26T00:31:08.902+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 3'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Web.Config Transforms'/><category scheme='http://www.blogger.com/atom/ns#' term='QueryExtender'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework 4'/><title type='text'>Oakton involved in Development of Microsoft Azure Project for Queensland Government</title><content type='html'>We recently started work (a week ago) at the North Ryde Microsoft Offices on an Azure-based&amp;nbsp;pledge application (&lt;a href="http://www.qld.gov.au/floods/pledge"&gt;www.qld.gov.au/floods/pledge&lt;/a&gt;). This relatively simple application supports the coordinaton of&amp;nbsp;offers from&amp;nbsp;private&amp;nbsp;organizations&amp;nbsp;and corresponding requests for help by flood-affected people in Queensland (and potentially other states affected by the floods). &lt;br /&gt;&lt;br /&gt;As per the Australian Newspaper's IT section:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"Microsoft is helping to develop a flood-recovery pledge website for the Queensland government, which will go live later this week. It will be based on the company's Azure cloud computing technology. It has been working with partners Oakton, Devtest and Readify in its recovery program."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;See original article at &lt;a href="http://www.theaustralian.com.au/australian-it/industry-digs-deep-for-queensland-flood-recovery/story-e6frgakx-1225989795344"&gt;http://www.theaustralian.com.au/australian-it/industry-digs-deep-for-queensland-flood-recovery/story-e6frgakx-1225989795344&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The solution is using the following technologies to deliver the end product:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Azure Web Roles (with 2 web applications on the one Web Role, which is allowed in the latest Azure 1.3 SDK).&lt;/li&gt;&lt;li&gt;SQL Azure, Development against local SQL Express instances on each machine, SQL Deployment and schema changes with the SQL Azure Migration tool - &lt;a href="http://sqlazuremw.codeplex.com/"&gt;http://sqlazuremw.codeplex.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Visual Studio 2010 using Data Dude Projects for Deployment&lt;/li&gt;&lt;li&gt;ASP.NET Web Forms 4.0 (as opposed to MVC 3 which was just released and I did an initial mockup with) - with Entity Framework 4, EntityDataSource and the QueryExtender control (&lt;a href="http://msdn.microsoft.com/en-us/library/dd537669(VS.100).aspx)"&gt;http://msdn.microsoft.com/en-us/library/dd537669(VS.100).aspx)&lt;/a&gt; , one of the new controls in .NET 4.0. We didn't use MVC based on the existing skills of the team and the short timelines.&lt;/li&gt;&lt;li&gt;TFS 2010 with&amp;nbsp; the Agile template, using Web.Config transforms for different release builds as demonstrated in &lt;a href="http://msdn.microsoft.com/en-us/vstudio/Video/ff801895"&gt;http://msdn.microsoft.com/en-us/vstudio/Video/ff801895&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Forms-based authentication, with a slighly modified version of the ASP.NET&amp;nbsp;SQL membership and Role Provider Database Scripts (so it works on SQL Azure). This is using scripts as described in the MS KB article here: &lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/2006191/en-au"&gt;http://support.microsoft.com/kb/2006191/en-au&lt;/a&gt;&lt;br /&gt;This database can also be created by the SQL-Azure equivalent of the the aspnet_regql.exe&amp;nbsp; tool used for non-Azure applications called "aspnet_regAzure.exe".&lt;/li&gt;&lt;li&gt;A secured SSL site for the internal Administrative application (e.g. for basic approvals and vetting). &lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1745337336802071273?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1745337336802071273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1745337336802071273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1745337336802071273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1745337336802071273'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/01/oakton-involved-in-development-of.html' title='Oakton involved in Development of Microsoft Azure Project for Queensland Government'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-9052173233194489127</id><published>2011-01-20T14:39:00.000+11:00</published><updated>2011-01-20T14:39:29.987+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Important Microsoft Azure Links</title><content type='html'>Here is a list of the most critical links useful if you are developing or testing out SQL Azure or&amp;nbsp;Windows Azure:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Azure Portal Site (using Silverlight) - for deployment and managment of the Windows Azure platform - &lt;a href="http://windows.azure.com/"&gt;http://windows.azure.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SQL Azure - &lt;a href="https://sql.azure.com/"&gt;https://sql.azure.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Tools and SDK - &lt;a href="http://www.microsoft.com/windowsazure/getstarted/default.aspx"&gt;http://www.microsoft.com/windowsazure/getstarted/default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Azure Billing Site - &lt;a href="https://mocp.microsoftonline.com/"&gt;https://mocp.microsoftonline.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Main Azure Landing Page - &lt;a href="http://www.microsoft.com/windowsazure/"&gt;http://www.microsoft.com/windowsazure/&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-9052173233194489127?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/9052173233194489127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=9052173233194489127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9052173233194489127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9052173233194489127'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/01/important-microsoft-azure-links.html' title='Important Microsoft Azure Links'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-191331734726545412</id><published>2011-01-19T23:08:00.002+11:00</published><updated>2011-02-03T10:36:07.145+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>Windows Azure and SQL Azure - Free benefits for MSDN Premium Subscribers in Australia</title><content type='html'>I've recently started an Microsoft Azure Cloud-based project for the Queensland Government through my employer Oakton. To help me get up to speed with the latest developments in Azure, an MSDN Premium subscription gives you a whole heap of free goodies (Windows Azure and SQL Azure)&amp;nbsp;to test out and demonstrate with.&lt;br /&gt;&lt;br /&gt;The details of free benefits for Australian MSDN subscribers can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsazure/offers/popup/popup.aspx?lang=en&amp;amp;locale=en-AU&amp;amp;offer=MS-AZR-0005P"&gt;http://www.microsoft.com/windowsazure/offers/popup/popup.aspx?lang=en&amp;amp;locale=en-AU&amp;amp;offer=MS-AZR-0005P&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will have to provide a credit card number if you do go over your MSDN Premium Subscription allowances - which are easily avoided if you're careful.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;The following rates are current as of 19/01/2011:&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MSDN Premium Subscription Benefit:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;Windows Azure&lt;/span&gt;&lt;br /&gt;750 hours of a small compute instance&lt;br /&gt;10 GB of storage&lt;br /&gt;1,000,000 storage transactions&lt;br /&gt;&lt;span style="color: blue;"&gt;SQL Azure&lt;/span&gt;&lt;br /&gt;3 Web Edition databases (up to 1 GB relational database each)&lt;br /&gt;&lt;span style="color: blue;"&gt;Windows Azure platform AppFabric&lt;/span&gt;&lt;br /&gt;1,000,000 Access Control transactions &lt;br /&gt;1 pack of 5 Service Bus connections***&lt;br /&gt;&lt;span style="color: blue;"&gt;Data Transfers&lt;/span&gt;&lt;br /&gt;North America and Europe (per region)&lt;br /&gt;7 GBs in&lt;br /&gt;14 GBs out&lt;br /&gt;Asia Pacific Region&lt;br /&gt;2.5 GB in&lt;br /&gt;5 GB out&lt;br /&gt;&lt;br /&gt;You may utilize up to the above amount of service each month without additional charge for 16 months following sign up for this offer as long as you maintain your MSDN Premium subscription. Any usage each month in excess of the MSDN Premium Subscription Benefit will be charged at the MSDN Premium rates. You can sign up for these Azure Benefits for your MSDN Premium subscription right here:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx"&gt;http://msdn.microsoft.com/en-us/subscriptions/ee461076.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;There is really no excuse not to try it out if you have an MSDN premium subscription!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-191331734726545412?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/191331734726545412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=191331734726545412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/191331734726545412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/191331734726545412'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/01/windows-azure-and-sql-azure-free.html' title='Windows Azure and SQL Azure - Free benefits for MSDN Premium Subscribers in Australia'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8422018857457562750</id><published>2011-01-13T11:38:00.003+11:00</published><updated>2011-01-13T12:06:34.483+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise for Microsoft SharePoint and SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Duet Enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP SharePoint Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>Duet Enterprise Released and Available for Download on MSDN!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TS5HhXJJiHI/AAAAAAAAAi4/v6upMuePtXo/s1600/DuetEnterpriseLogo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" n4="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TS5HhXJJiHI/AAAAAAAAAi4/v6upMuePtXo/s1600/DuetEnterpriseLogo.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;After a long wait, Duet Enterprise 1.0, Microsoft and SAP's &lt;strong&gt;premier framework&lt;/strong&gt; for SAP integration&amp;nbsp;with SharePoint 2010&amp;nbsp;and Office 2010 has finally been released on MSDN. At &lt;span style="color: #6aa84f;"&gt;&lt;strong&gt;Oakton&lt;/strong&gt;&lt;/span&gt;, I've been doing SAP to SharePoint integration for the last 18 months so a framework and guidance like this is quite exciting.&lt;br /&gt;&lt;br /&gt;If you have an MSDN subscription, you can get it from here:&lt;br /&gt;&lt;a href="https://msdn.microsoft.com/en-us/subscriptions/securedownloads/default.aspx"&gt;https://msdn.microsoft.com/en-us/subscriptions/securedownloads/default.aspx&lt;/a&gt;&lt;br /&gt;Also note that this is not the ONLY way to integrate and alternatives like just using out of the box SharePoint 2010 BCS (Business Connectivity Services), or the Biztalk SAP Adapters Packs are the way to go. It really depends on your requirements. Duet Enterprise provides a few sample scenarios as part of the framework to get you started as a model for integration guidance.&lt;br /&gt;&lt;br /&gt;Here is a high level architecture diagram in case you're completely unfamiliar with the product (it requires and utilizes SharePoint 2010 BCS under the covers)&amp;nbsp;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TS5I0Mu0iII/AAAAAAAAAi8/ZpdECppeUoI/s1600/DuetEnterpriseDesign.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="152" n4="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TS5I0Mu0iII/AAAAAAAAAi8/ZpdECppeUoI/s320/DuetEnterpriseDesign.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Basically, Duet Enterprise&amp;nbsp;gives you a head-start&amp;nbsp;in terms of plumbing when you start a new&amp;nbsp;SAP-SharePoint Integration project. It includes the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A framework for building SAP-SharePoint-Office Integration Scenarios&lt;/li&gt;&lt;li&gt;SAP Workflow Integration from SharePoint (though this is not using SAP BPM)&lt;/li&gt;&lt;li&gt;Some Pre-canned Site Templates for certain scenarios like retrieving Customer Information through SharePoint&lt;/li&gt;&lt;li&gt;Components to allow retrieval of SAP reports from SharePoint&lt;/li&gt;&lt;li&gt;Duet Enterprise Document collaboration functionality&lt;/li&gt;&lt;li&gt;Communication Monitoring and Support Components to make troubleshooting easier. &lt;/li&gt;&lt;li&gt;A security framework for authorization purposes.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;There are a couple of known issues with the release (not absolute showstoppers for my clients, but you should be aware of them):&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Known Issue (1):&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Aggregator Web Part will not work across the Web Apps having different Authentication&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Description: Aggregator Web Part is deliverable of the Duet Workflow Feature. This Web Part will provide a support to view the Task for particular user across the Site Collection and Web App.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Current Limitation to the web Part - This Web Part cannot support the Scenario of Web Part is created in one type of authenticated Web App and the Rootsite Parameter pointing to the different Web App which if different authentication. Eg: Web Part placed in Win Claims based Web App can pull/show the task assigned to the User under another rootsite created in another win claim Web App but it will not work for the rootsite created in Win Legacy Web App and then the Page on which Web Part is placed will not accessible.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Viewing the Tasks from the Cross Auth Web App in aggregator web part is not Supported&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Workaround: To Fix the Page which is caused by cross authentication issue in Aggregator Web Part in the Page is to remove the web Part through SPD and then add the Aggregator web Part and point only to the rootsite accessible and same authenticated.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Known Issue (2):&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Task with attachments cannot be created and assigned to users in Turkish environment.&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;The following languages are included in this product: Arabic, Chinese-Simplified, Chinese-Traditional, English, French, German, Hebrew, Italian, Japanese, Portuguese-Brazil, Russian, Spanish, and Turkish.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Microsoft will be having some official launch announcements soon and I'll be covering Duet in more detail in later blog posts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8422018857457562750?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8422018857457562750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8422018857457562750' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8422018857457562750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8422018857457562750'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/01/duet-enterprise-released-and-available.html' title='Duet Enterprise Released and Available for Download on MSDN!'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TS5HhXJJiHI/AAAAAAAAAi4/v6upMuePtXo/s72-c/DuetEnterpriseLogo.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2494301279705293595</id><published>2011-01-12T17:28:00.003+11:00</published><updated>2011-01-13T13:30:50.214+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Best Practices'/><title type='text'>SharePoint 2007 and SharePoint 2010 Best Practice - Run SPDisposeCheck as part of your Build process with an Error Condition</title><content type='html'>One of the most common (and frustrating) sources of memory leak issues&amp;nbsp;in SharePoint 2007 and SharePoint 2010 applications lies in the incorrect disposal of objects with unmanaged components. Memory leak issues typically show themselves in symptoms like:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Excessive paging on the server and low memory issues&lt;/li&gt;&lt;li&gt;The&amp;nbsp;IIS application pools recycling&amp;nbsp;themselves repeatedly&lt;/li&gt;&lt;li&gt;Generally sluggish performance for end users (as the RAM gets eaten up by&amp;nbsp;referenced SharePoint objects)&lt;/li&gt;&lt;/ol&gt;Why doesn't the .NET garbage collector clean them out of memory? Because the .NET objects are typically small - but it's the &lt;strong&gt;unmanaged (&lt;/strong&gt;invisible to the .NET framework) that ravenously consumes your server's precious memory.&lt;br /&gt;&lt;br /&gt;So what objects normally cause these issues? The prime suspects are normally undisposed instances of the SPSite and SPWeb classes - as detailed extensively on MSDN here:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee557362.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee557362.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm a firm believer in automated testing and code auditing tools&amp;nbsp;- so to &lt;strong&gt;preemptively&lt;/strong&gt; avoid such issues with disposal of unmanaged objects, I recommend to all of my SharePoint clients that &lt;strong&gt;you must have SPDispose check as part of your regular build process&lt;/strong&gt; in any SharePoint Project. This avoids any existing code or any new code killing your SharePoint&amp;nbsp;Farm with "unmanaged object bloat".&lt;br /&gt;&lt;br /&gt;As described by the SPDisposeCheck documentation:&lt;br /&gt;&lt;em&gt;"SPDisposeCheck is a tool to help you to check your assemblies that use the SharePoint API so that you can build better code. It provides assistance in correctly disposing of certain SharePoint objects to help you follow published best practice. This tool may not show all memory leaks in your code. Further investigation is advised if you continue to experience issues.&amp;nbsp; New features in this release include VS 2008 and 2008 add-in, added “Do Not Dispose Rules”, bug fixes, and updated for WSS 3.0 / MOSS 2007 and SPF / SharePoint Server 2010. "&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The great thing about this latest release is that it will even tell you when you are &lt;strong&gt;unneccesarily&lt;/strong&gt; disposing your SharePoint objects. &lt;br /&gt;&lt;br /&gt;I didn't have much luck with the Visual Studio&amp;nbsp;Add-in in the latest version of SPDisposeCheck (it would never run a check). As an alternative, I suggest you implement this command as part of your After build in project properties for each of your projects:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"C:\Program Files (x86)\Microsoft\SharePoint Dispose Check\SPDisposeCheck.exe" "$(TargetPath)"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TS057w8dXtI/AAAAAAAAAi0/p8zzLlt30Bk/s1600/SPDisposeCheckWillFailBuild.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" n4="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TS057w8dXtI/AAAAAAAAAi0/p8zzLlt30Bk/s320/SPDisposeCheckWillFailBuild.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;[Alternatively, you can copy the executable to a solution folder and use a relative path]. This commandline will fail the project (returning a non-zero value) if there are any problems - preventing a build from occurring unless the problem is fixed or you use the "SPDisposeCheckIgnoreAttribute" on your method.&amp;nbsp;Unfortunately there are no binaries currently to reference&amp;nbsp;so you can consume this attribute in your code. Instead, you can obtain the source code for the SPDisposeCheckIgnoreAttribute from the following directory once you've installed the SPDisposeCheck msi:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;C:\Program Files (x86)\Microsoft\SharePoint Dispose Check\SPDisposeExamplesSource.zip\SPDisposeExamplesSource&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2494301279705293595?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2494301279705293595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2494301279705293595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2494301279705293595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2494301279705293595'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2011/01/sharepoint-2007-and-sharepoint-2010.html' title='SharePoint 2007 and SharePoint 2010 Best Practice - Run SPDisposeCheck as part of your Build process with an Error Condition'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/TS057w8dXtI/AAAAAAAAAi0/p8zzLlt30Bk/s72-c/SPDisposeCheckWillFailBuild.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3748977403197280571</id><published>2010-12-17T16:34:00.001+11:00</published><updated>2010-12-17T16:35:25.840+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oakton'/><title type='text'>Oakton hiring in India - and there's a billboard to prove it!</title><content type='html'>My employer &lt;strong&gt;Oakton&lt;/strong&gt; is currently doing a big recruitment drive in India... this reminds me of when one of my previous employers made a 50-metre long company logo out of vinyl hoping it would appear on Google maps. We spent all day putting it out and the plane didn't even fly over!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TQruCj1SPHI/AAAAAAAAAio/HKlNcBpZhAQ/s1600/Jubleehills+rd+no++36+Nr+croma+Bldg+fgcheckpost+40x40+%25283%2529.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" n4="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TQruCj1SPHI/AAAAAAAAAio/HKlNcBpZhAQ/s320/Jubleehills+rd+no++36+Nr+croma+Bldg+fgcheckpost+40x40+%25283%2529.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQr2D6idwWI/AAAAAAAAAis/dv3rKcDwQz8/s1600/JubileeHills2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" n4="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQr2D6idwWI/AAAAAAAAAis/dv3rKcDwQz8/s320/JubileeHills2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3748977403197280571?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3748977403197280571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3748977403197280571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3748977403197280571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3748977403197280571'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/12/oakton-hiring-in-india-and-theres.html' title='Oakton hiring in India - and there&apos;s a billboard to prove it!'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/TQruCj1SPHI/AAAAAAAAAio/HKlNcBpZhAQ/s72-c/Jubleehills+rd+no++36+Nr+croma+Bldg+fgcheckpost+40x40+%25283%2529.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-4223604611782073448</id><published>2010-12-17T13:10:00.001+11:00</published><updated>2010-12-17T13:26:57.990+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP Enterprise Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP BAPIs'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><title type='text'>How to Use BAPI_CUSTOMER_FIND to search for Customers in SAP</title><content type='html'>BAPI's are a useful way of retrieving data in SAP for testing purposes - even if they are not the recommended way of retrieving data from SAP from external systems (you should use Enterprise Services for that).&amp;nbsp; I had a problem with the quirks of one of the BAPIs today - the SAP BAPI "&lt;strong&gt;BAPI_CUSTOMER_FIND&lt;/strong&gt;" wouldn't allow me to perform a wildcard search on the Customer Name (the KNA1.NAME1 field). Exact matches worked fine. Turns out there is a field &lt;strong&gt;"PL_HOLD"&amp;nbsp;&lt;/strong&gt;in the input parameters&amp;nbsp;that has to have a value of "X" in order for wildcard matches to work at all.&lt;br /&gt;&lt;br /&gt;So the process is:&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Work out the field and table name that you want with SAP transaction /nse11&lt;/li&gt;&lt;li&gt;Test the BAPI:&lt;/li&gt;&lt;li&gt;Make sure that MAX_COUNT is&amp;nbsp;200, or the desired maximum number of return values. Use 0 for an unlimited number of return results. &lt;/li&gt;&lt;li&gt;Make sure PL_HOLD is X to enable wildcard matching&lt;/li&gt;&lt;li&gt;Put the TableName (e.g. KNA1 for customer master), field name (e.g. NAME1 for customer name) and the wildcard in the SELOPT_TAB table&lt;/li&gt;&lt;li&gt;Run your BAPI to perform the search.&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TQrDvS6FvtI/AAAAAAAAAig/p8p-s6mr3ww/s1600/BAPI_CUSTOMER_FIND_1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" n4="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TQrDvS6FvtI/AAAAAAAAAig/p8p-s6mr3ww/s320/BAPI_CUSTOMER_FIND_1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TQrGFeA8uwI/AAAAAAAAAik/88SH1iunMUc/s1600/BAPI_CUSTOMER_FIND_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="199" n4="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TQrGFeA8uwI/AAAAAAAAAik/88SH1iunMUc/s320/BAPI_CUSTOMER_FIND_2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Of couse you wouldn't need to worry about this if you are just using &lt;strong&gt;SOAPUI&lt;/strong&gt; and the &lt;strong&gt;&lt;em&gt;CustomerSimpleByNameAndAddressQuery enterprise service&lt;/em&gt;&lt;/strong&gt; as it has no such flags to enable the wildcard searching - but that's another story.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-4223604611782073448?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/4223604611782073448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=4223604611782073448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4223604611782073448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4223604611782073448'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/12/how-to-use-bapicustomerfind-to-search.html' title='How to Use BAPI_CUSTOMER_FIND to search for Customers in SAP'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TQrDvS6FvtI/AAAAAAAAAig/p8p-s6mr3ww/s72-c/BAPI_CUSTOMER_FIND_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2049158215610083722</id><published>2010-12-14T14:17:00.001+11:00</published><updated>2010-12-14T14:17:47.819+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework 4.5'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework 2011 Feature Pack'/><title type='text'>Entity Framework "4.5" coming out in Q1 2011 as a Feature Pack/Update</title><content type='html'>The Community Tech Preview 5 (CTP5) of the Entity Framework Feature update (aka EF 4.5 - name to be confirmed) was just released for download&amp;nbsp;last week according to the &lt;strong&gt;ADO.NET team blog&lt;/strong&gt; - see&amp;nbsp; &lt;a href="http://blogs.msdn.com/b/adonet/archive/2010/12/06/ef-feature-ctp5-released.aspx"&gt;http://blogs.msdn.com/b/adonet/archive/2010/12/06/ef-feature-ctp5-released.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This has facilities to create databases based on:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A&amp;nbsp;"Code First" approach where&amp;nbsp;the code&amp;nbsp;defines the model, which in turn&amp;nbsp;can generate the database for you. This involves the ability to define your model using the "Fluent API" rather than an entity diagram.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;"Model First" approach where the normal edmx EF Designer is used to create the&amp;nbsp;Model and&amp;nbsp;the database can be&amp;nbsp;generated from that.&lt;/li&gt;&lt;/ol&gt;I will be also looking forward to any performance improvements the guys at MS are going to incorporate into the RTM build.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2049158215610083722?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2049158215610083722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2049158215610083722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2049158215610083722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2049158215610083722'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/12/entity-framework-45-coming-out-in-q1.html' title='Entity Framework &quot;4.5&quot; coming out in Q1 2011 as a Feature Pack/Update'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-99595260446893</id><published>2010-12-13T23:02:00.003+11:00</published><updated>2010-12-13T23:05:19.157+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fake SDHC'/><category scheme='http://www.blogger.com/atom/ns#' term='Fake SanDisk'/><title type='text'>How to spot a fake SanDisk SDHC Card</title><content type='html'>I recently had the misfortune of purchasing a fake 32GB SDHC card for my HTC Desire. I only found out a few weeks after my purchase when I started to notice corruption in some of the mp3 files I was copying over to my card. Once I copied them over, Files on the Android-based phone would sit on the card for a minute or two and then disappear. To confirm it was a fake card,&amp;nbsp;I tried to format it and then copied some large files onto then off the card. This copy process failed when trying to read the files back off the fake media.&lt;br /&gt;&lt;br /&gt;Apparently, the dealers in China often rip the cards out of old GPS machines and relabel them with a fake serial number and SanDisk logos.&lt;br /&gt;&lt;br /&gt;After looking into the topic, it turns out there are some telltale signs that give a fake card away:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The serial number is on the back, not the front so fraudulent sellers can display the card in photos without giving their game away.&lt;/li&gt;&lt;li&gt;The SDHC logo is not clearly printed and may appear blurred or smudged.&lt;/li&gt;&lt;li&gt;The white writing on the card is a&amp;nbsp;straight white rather than a muted white colour.&lt;/li&gt;&lt;/ol&gt;See below for a photo of the fake and the real card side-by-side. The real card is on the left, the fake is on the right hand side:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQYLDKrBbkI/AAAAAAAAAiY/fa0vM9hleRA/s1600/FakeSDHCCard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" n4="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQYLDKrBbkI/AAAAAAAAAiY/fa0vM9hleRA/s320/FakeSDHCCard.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The only guaranteed way of getting a real SDHC card is by dealing with a local dealer who has a legitimate address in Australia and who you can follow up through&amp;nbsp;the&amp;nbsp;Australian Competition and Consumer Commission (ACCC) if you are sold a fake.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;You have been warned!&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-99595260446893?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/99595260446893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=99595260446893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/99595260446893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/99595260446893'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/12/how-to-spot-fake-sandisk-sdhc-card.html' title='How to spot a fake SanDisk SDHC Card'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TQYLDKrBbkI/AAAAAAAAAiY/fa0vM9hleRA/s72-c/FakeSDHCCard.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5495541646160804884</id><published>2010-12-13T19:34:00.010+11:00</published><updated>2010-12-15T18:33:13.447+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Table Splitting'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><title type='text'>Performance and the Entity Framework (EF) 3.5 - How to Lazy Load Fields within the one table</title><content type='html'>There are 2 different camps when it comes to application performance:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Functionality should be delivered first and we can optimize performance later&lt;/li&gt;&lt;li&gt;We should constantly strive to test and improve the application performance throughout development.&amp;nbsp; - this is particularly important when dealing with new or unproven technologies.&lt;/li&gt;&lt;/ol&gt;While it is good to be constantly proactive in improving performance, it can sometimes be a hinderance to the project and delivering functionality that the&amp;nbsp;client can actually use. Clearly Microsoft has&amp;nbsp;taken the first approach with the&amp;nbsp;first version of the Entity Framework (EF 3.5).&amp;nbsp;As a hybrid approach between these two, I strongly believe in the use of a &lt;strong&gt;Proof of Concept&lt;/strong&gt; based on core use cases for every project aimed and proving integration approaches and the expected performance of the end system. This helps you develop some golden rules/rules of thumb for that particular implementation and can help you to avoid larger-scale issues down the track.&lt;br /&gt;&lt;br /&gt;Performance&amp;nbsp;approaches aside, one of my clients recently had an issue with performance of a system based on the Entity Framework 3.5. Many of the issues in general with EF performance are well documented and I will not detail them here - however there are some golden rules that apply to any database-driven application:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Minimize the amount of data you bring across the network&lt;/li&gt;&lt;li&gt;Minimize network "chattiness" as each round-trip has an overhead. You can batch up requests to resolve this issue.&lt;/li&gt;&lt;li&gt;JOIN and Filter your queries to minimize the number of records that SQL needs to process in order to return results.&lt;/li&gt;&lt;li&gt;Index your DB properly and use Indexed (SQL Server)/Materialized (Oracle) Views for the most common JOINS&lt;/li&gt;&lt;li&gt;Cache Data and HTML that is static so you don't have to hit the database or the ORM model in the first place&lt;/li&gt;&lt;li&gt;Denormalize your application if performance is suffering due to "over-normalization"&lt;/li&gt;&lt;li&gt;Reduce the number of dynamically generated objects where possible as they incur an overhead.&lt;/li&gt;&lt;li&gt;Explicitly loading entities rather than loading them through the ORM (e.g. via an ObjectQuery&amp;nbsp;in Entity Framework) when the ORM outputs poor performing JOINS or UNIONs.&lt;/li&gt;&lt;/ol&gt;One thing that I noticed in this application that violated Rule 1 -&amp;nbsp;was the use of a EF entity "SystemFile"&amp;nbsp;which had a field called "Contents" that held large binary streams (aka BLOBs) and was pulling them out from the database every time the&amp;nbsp;Entity was involved in a query. The Entity Framework doesn't support lazy loading of fields per se - but it does support loading of entities separately.&lt;br /&gt;&lt;br /&gt;Using this concept, the most obvious step seemed to me to be:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Remove the "Contents" field from the "SystemFile" entity so it didn't get automatically loaded when the EF entity was referenced in a LINQ2E query.&lt;/li&gt;&lt;li&gt;Create an &lt;strong&gt;inherited &lt;/strong&gt;entity "SystemFileContents" that just had the contents of the file so the application can load it up only when needed.&lt;/li&gt;&lt;/ol&gt;This was fine - but&amp;nbsp;then my Data Access Layer then wouldn't compile and I received the following error:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQXY1qcP1YI/AAAAAAAAAiU/Vj65hnckkPo/s1600/SystemFileInheritance.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" n4="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TQXY1qcP1YI/AAAAAAAAAiU/Vj65hnckkPo/s320/SystemFileInheritance.jpg" width="248" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;Error 3034: Problem in Mapping Fragments starting at lines 6872, 6884: Two entities with different keys are mapped to the same row. Ensure these two mapping fragments do not map two groups of entities with overlapping keys to the same group of rows.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;After a little investigation, I found there are a few different approaches to this error:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Implement a Table Per Hierarchy (TPH) as described at &lt;span style="font-family: 'Arial','sans-serif'; font-size: 10pt; mso-ansi-language: EN-AU; mso-bidi-language: AR-SA; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: EN-AU;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb738443(v=VS.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/bb738443(v=VS.90).aspx&lt;/a&gt;&lt;/span&gt;.&amp;nbsp;This would mean I could just make some database changes and move the file binary contents into a separate table. After that I could just make the parent "SystemFile" class an abstract one, and only refer to 2 new child classes "SystemFileWithContents" and "SystemFileWithoutContents"&lt;/li&gt;&lt;li&gt;I could simply split the table into 2 different entities with a &lt;strong&gt;1:1&amp;nbsp;association&lt;/strong&gt; rather than an inheritance relationship in the Entity Framework Model.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;Option&amp;nbsp;2 was the best in terms of minimizing code impact as this application had been in development for over a year. To this end, I used the advice here regarding adding multiple entity types for the same table.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx"&gt;http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The designer in Visual Studio 2008 doesn't support this arrangement (though the designer in Visual Studio 2010 does as per &lt;a href="http://thedatafarm.com/blog/data-access/leveraging-vs2010-rsquo-s-designer-for-net-3-5-projects/"&gt;http://thedatafarm.com/blog/data-access/leveraging-vs2010-rsquo-s-designer-for-net-3-5-projects/&lt;/a&gt;) - so you have to modify the Xml file directly and add a &lt;br /&gt;"ReferentialConstraint" node to correctly relate the 2 entities:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;We add the referential constraint to it to inform the model that the ids of these two types are tied to each other:&lt;br /&gt;&lt;br /&gt;&amp;lt;Association Name="SystemFileSystemFileContent"&amp;gt;&lt;br /&gt;  &amp;lt;End Type="SampleModel.SystemFile" Role="SystemFile" Multiplicity="1" /&amp;gt;&lt;br /&gt;  &amp;lt;End Type="SampleModel.SystemFileContent" Role="SystemFileContent" Multiplicity="1" /&amp;gt;&lt;br /&gt;  &amp;lt;ReferentialConstraint&amp;gt;&lt;br /&gt;    &amp;lt;Principal Role="SystemFile"&amp;gt;&amp;lt;PropertyRef Name="FileId"/&amp;gt;&amp;lt;/Principal&amp;gt;&lt;br /&gt;    &amp;lt;Dependent Role="SystemFileContent"&amp;gt;&amp;lt;PropertyRef Name="FileId"/&amp;gt;&amp;lt;/Dependent&amp;gt;&lt;br /&gt;  &amp;lt;/ReferentialConstraint&amp;gt;&lt;br /&gt;&amp;lt;/Association&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This reduced the load on SQL and the web server as it didn't have to drag across the data dynamically on each call to the SystemFile table anymore. Any performance improvement must be measurable - so the team confirmed this with scripted Visual Studio 2008 Load tests which has a customer-validated test mix based on their expected usage of the system. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5495541646160804884?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5495541646160804884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5495541646160804884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5495541646160804884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5495541646160804884'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/12/performance-and-entity-framework-ef-10.html' title='Performance and the Entity Framework (EF) 3.5 - How to Lazy Load Fields within the one table'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TQXY1qcP1YI/AAAAAAAAAiU/Vj65hnckkPo/s72-c/SystemFileInheritance.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1780107554338345631</id><published>2010-11-19T17:30:00.003+11:00</published><updated>2010-11-19T17:37:22.865+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SPUser'/><title type='text'>SharePoint - How to get an SPUser Object based on a Person Field in a SharePoint List</title><content type='html'>I had a question today about &lt;em&gt;how to determine the email address of the user who is mentioned in the "Responsible Field" of a SharePoint list.&lt;/em&gt; He was trying to develop an event receiver that would email a particular user if they were mentioned in that field.&amp;nbsp;&lt;strong&gt;To this end, here is a tiny method I wrote to get an SPUser based on a Person&amp;nbsp;field in a SharePoint list.&lt;/strong&gt; The code has to first obtain a reference to the relevant SPField and then use the "GetFieldValue" method of the SPField to get the SPFieldUserValue. The SPFieldUserValue is really just an SPUser:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Gets the SP User object from a person field (e.g. the Modified By field) &lt;br /&gt;        /// so we can determine the email address or other details of that user.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="listItem"&gt;e.g. the SPItem with the Person field obtained &lt;br /&gt;        /// from web.Lists[0].Items[0] &lt;/param&gt;        /// &lt;param name="fieldName"&gt;e.g. a person field e.g. "Modified By"&lt;/param&gt;&lt;br /&gt;        public static SPUser GetSPUserFromPersonField(SPListItem listItem, string fieldName)&lt;br /&gt;        {&lt;br /&gt;            var personField = listItem.Fields[fieldName];&lt;br /&gt;            return ((SPFieldUserValue)personField.GetFieldValue(listItem[fieldName].ToString())).User;&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1780107554338345631?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1780107554338345631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1780107554338345631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1780107554338345631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1780107554338345631'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/11/how-to-get-spuser-object-based-on.html' title='SharePoint - How to get an SPUser Object based on a Person Field in a SharePoint List'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7792366058949345809</id><published>2010-11-16T11:02:00.002+11:00</published><updated>2010-11-16T11:06:11.458+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WS-RM'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Exception when connecting WCF client to SAP WS-Reliable Messaging enabled web service - "Invalid WS-RM message. There are no WS-RM headers within SOAP message."</title><content type='html'>One of the SAP Business Process Management (SAP BPM)&amp;nbsp;WSDLs consumed by a SharePoint web part was re-created by a member of our development team yesterday.&amp;nbsp;My&amp;nbsp;.NET client application then refused to operate with the new SAP SOAP endpoints&amp;nbsp;and began to spit out the following error in the SOAP response (as captured by WireShark):&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;SOAP-ENV:Envelope xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;br /&gt;&amp;lt;SOAP-ENV:Body&amp;gt;&lt;br /&gt;&amp;lt;SOAP-ENV:Fault&amp;gt;&lt;br /&gt;&amp;lt;faultcode&amp;gt;SOAP-ENV:Server&amp;lt;/faultcode&amp;gt;&lt;br /&gt;&amp;lt;faultstring xml:lang="en"&amp;gt;Invalid WS-RM message. There are no WS-RM headers within SOAP message.&amp;lt;/faultstring&amp;gt;&lt;br /&gt;&amp;lt;faultactor&amp;gt;Server&amp;lt;/faultactor&amp;gt;&lt;br /&gt;&amp;lt;detail&amp;gt;&lt;br /&gt;&amp;lt;yq1:com.sap.engine.services.wsrm.exceptions.ReliableMessagingException xmlns:yq1="http://sap-j2ee-engine/error"&amp;gt;Invalid WS-RM message. There are no WS-RM headers within SOAP message.&amp;lt;/yq1:com.sap.engine.services.wsrm.exceptions.ReliableMessagingException&amp;gt;&lt;br /&gt;&amp;lt;/detail&amp;gt;&lt;br /&gt;&amp;lt;/SOAP-ENV:Fault&amp;gt;&lt;br /&gt;&amp;lt;/SOAP-ENV:Body&amp;gt;&lt;br /&gt;&amp;lt;/SOAP-ENV:Envelope&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;WS-RM (WS-Reliable messaging) is a protocol that allows messages to be transferred reliably between nodes that implement this protocol in the presence of software component, system, or network failures.&lt;br /&gt;&lt;br /&gt;MSDN has a brief mention of the potential problem here:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff710229.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff710229.aspx&lt;/a&gt; &lt;br /&gt;As described in the article:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;"Both products also support WS-ReliableMessaging 1.0. However, the implementations are not interoperable. &lt;span style="color: red;"&gt;Do not use WS-ReliableMessaging 1.0 when exchanging messages between SAP and .NET Framework.&lt;/span&gt;"&lt;/b&gt;&lt;br /&gt;In fact, even though SAP and WCF both support WS-ReliableMessaging 1.0, you cannot use it - it will just give you an error like the above. You can either turn WS-RM off or use version 1.1 of WS-ReliableMessaging for your SAP to .NET WCF communications.&lt;br /&gt;&lt;br /&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7792366058949345809?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7792366058949345809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7792366058949345809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7792366058949345809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7792366058949345809'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/11/exception-when-connecting-wcf-client-to.html' title='Exception when connecting WCF client to SAP WS-Reliable Messaging enabled web service - &quot;Invalid WS-RM message. There are no WS-RM headers within SOAP message.&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7471568040202195679</id><published>2010-10-25T12:35:00.001+11:00</published><updated>2010-10-25T12:35:50.073+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Custom Master Pages'/><title type='text'>Fix - "An error occurred during the processing of /_catalogs/masterpage/CompanyNameHomePage.aspx. Code blocks are not allowed in this file." - SharePoint 2007 Exception</title><content type='html'>Today I had an urgent call from the Support desk at my current client&amp;nbsp;- and had to be pulled out of a meeting to help resurrect&amp;nbsp;a corporate intranet. All pages in the corporate intranet were down and all were giving the same error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;"An error occurred during the processing of /_catalogs/masterpage/CompanyNameHomePage.aspx. Code blocks are not allowed in this file."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TMTcOCyH6eI/AAAAAAAAAiM/G3VBxCR8PTA/s1600/CustomMasterPage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="142" nx="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TMTcOCyH6eI/AAAAAAAAAiM/G3VBxCR8PTA/s320/CustomMasterPage.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Turns out one of the support guys had checked out a page when viewing the master page library and checked it back in. There were no actual changes to the page code at all - but to try and fix the problem, they tried to restore from previous versions in the version history of the library. It made no difference. &lt;/div&gt;&lt;br /&gt;When I saw the error, I recognized this immediately that &lt;strong&gt;&lt;em&gt;something had been unghosted &lt;/em&gt;&lt;/strong&gt;(ie was now serving the code from the content database and not the filesystem). The SharePoint page parser was now recognizing that there was inline script (as file-system served files are inherently trusted and content database files are inherently untrusted) - and it was failing.&lt;br /&gt;&lt;br /&gt;The fix was to just &lt;strong&gt;reset the specific page to the site definition&lt;/strong&gt; to effectively reghost it (so it was the same as the one deployed by the original feature). The steps are: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start Internet Explorer.&lt;/li&gt;&lt;li&gt;Browse the SharePoint site to locate Site Actions.&lt;/li&gt;&lt;li&gt;Click Site Actions, and then click Site Settings.&lt;/li&gt;&lt;li&gt;On the Site Settings page, click Reset to site definition under the Look and Feel option.&lt;/li&gt;&lt;li&gt;On the Reset Page to Site Definition Version page, type &lt;pageurl&gt;URL for the home page (in the 'Reset specific page to site definition version' textbox (e.g.&amp;nbsp;&lt;span style="color: red;"&gt;/_catalogs/masterpage/CompanyNameHomePage.aspx&lt;/span&gt; , and then click &lt;strong&gt;Reset to reset the page to the site definiton version (and re-ghosting the page)&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TMTeCRY27MI/AAAAAAAAAiQ/B2D-l14u6qw/s1600/ResetToSiteDefinition.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="79" nx="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TMTeCRY27MI/AAAAAAAAAiQ/B2D-l14u6qw/s320/ResetToSiteDefinition.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This resolved the issue immediately and I had a call just 10 seconds later thanking&amp;nbsp;me for fixing it :o).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7471568040202195679?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7471568040202195679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7471568040202195679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7471568040202195679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7471568040202195679'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/10/fix-error-occurred-during-processing-of.html' title='Fix - &quot;An error occurred during the processing of /_catalogs/masterpage/CompanyNameHomePage.aspx. Code blocks are not allowed in this file.&quot; - SharePoint 2007 Exception'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TMTcOCyH6eI/AAAAAAAAAiM/G3VBxCR8PTA/s72-c/CustomMasterPage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5893266799890846301</id><published>2010-10-08T15:55:00.002+11:00</published><updated>2010-10-08T15:59:18.795+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath Browser Based Forms'/><title type='text'>Fix - InfoPath Browser Forms Error - "There has been an error while loading the form. A required resource could not be downloaded. To To try to resume the download, refresh the page."</title><content type='html'>If you receive the following error in an InfoPath 2007 Browser based form:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;There has been an error while loading the form. A required resource could not be downloaded. To To try to resume the download, refresh the page.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TK6hoSJStcI/AAAAAAAAAiI/aF0WsLSLCd8/s1600/ErrorScreenshot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ex="true" height="26" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TK6hoSJStcI/AAAAAAAAAiI/aF0WsLSLCd8/s320/ErrorScreenshot.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You will also receive the following in your SharePoint ULS logs straight after the user sees this error regarding the "Canary" timing out:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;10/07/2010 10:53:54.89 w3wp.exe (0x0D70) 0x1804 Forms Server Forms Services Runtime 5ajc Medium The Canary has timed out for form 6bbd1ceb-7956-49de-aaa5-015d7d94d2b2:ver:1.0.0.2258 &lt;/span&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;10/07/2010 10:53:54.90 w3wp.exe (0x0D70) 0x1804 Forms Server Forms Services Runtime 7tel Assert WARNING: Invalid Canary for view file. StackTrace: at Microsoft.Office.InfoPath.Server.Controls.ResourcePage.GetSolutionAndVerifyCanary(HttpContext context, String solutionId, SPSite contextSite, ResourceErrorType&amp;amp; error) at Microsoft.Office.InfoPath.Server.Controls.ResourcePage.HandleViewFile(HttpContext context) at Microsoft.Office.InfoPath.Server.Controls.ResourcePage.&amp;lt;&amp;gt;c__DisplayClass2.&lt;processrequest&gt;b__0() at Microsoft.Office.Server.Diagnostics.FirstChanceHandler.ExceptionFilter(Boolean fRethrowException, TryBlock tryBlock, FilterBlock filter, CatchBlock catchBlock, FinallyBlock finallyBlock) at Microsoft.Office.InfoPath.Server.Controls.ResourcePage.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplicat...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a result of the session timing out (the default is 20 minutes). Simply increase the session time out based on your user's standard behaviours (e.g. going out to lunch while filling out a form or taking a very long time to fill out a form). We increased ours to 1 hour session timeout as described here &lt;br /&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc725820(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/cc725820(WS.10).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5893266799890846301?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5893266799890846301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5893266799890846301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5893266799890846301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5893266799890846301'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/10/fix-infopath-browser-forms-error-there.html' title='Fix - InfoPath Browser Forms Error - &quot;There has been an error while loading the form. A required resource could not be downloaded. To To try to resume the download, refresh the page.&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TK6hoSJStcI/AAAAAAAAAiI/aF0WsLSLCd8/s72-c/ErrorScreenshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1748621984571345389</id><published>2010-10-03T18:03:00.001+11:00</published><updated>2010-10-03T18:03:51.602+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Network Load Balancing'/><title type='text'>How to Check that Windows Server 2008 Network Load Balancing (NLB) is using "Sticky Sessions"</title><content type='html'>Today I wanted to validate that our 3 load balanced SharePoint Web Front End Servers were using sticky sessions (I already know that they are using SQL Server for session state) - for peace of mind. Here is how to check:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start&amp;nbsp;- Control Panel&amp;nbsp;- Administrative Tools - Network Load Balancing Manager &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKgpMcsYEAI/AAAAAAAAAiA/Rq0QHvZ1aqc/s1600/NetworkLoadBalancing.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="95" px="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKgpMcsYEAI/AAAAAAAAAiA/Rq0QHvZ1aqc/s320/NetworkLoadBalancing.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Check that the Affinity is set to "Single" for each server in the Network Load Balancing Column:&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKgqGXXee1I/AAAAAAAAAiE/u8gnA4dmDGk/s1600/NLBAffinity.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKgqGXXee1I/AAAAAAAAAiE/u8gnA4dmDGk/s320/NLBAffinity.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;﻿&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1748621984571345389?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1748621984571345389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1748621984571345389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1748621984571345389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1748621984571345389'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/10/how-to-check-that-windows-server-2008.html' title='How to Check that Windows Server 2008 Network Load Balancing (NLB) is using &quot;Sticky Sessions&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D1pKsA4Vwno/TKgpMcsYEAI/AAAAAAAAAiA/Rq0QHvZ1aqc/s72-c/NetworkLoadBalancing.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-471157451326888583</id><published>2010-10-01T00:02:00.003+10:00</published><updated>2010-10-01T00:12:48.536+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='China'/><category scheme='http://www.blogger.com/atom/ns#' term='Travel'/><title type='text'>Back from our China Trip 2010 (Hong Kong, Shanghai, Dali, Lijiang, Guilin, Shangri-La)</title><content type='html'>I'm back in Oz after my second trip to China with my wife and kids. The main driver for us to go was to show my father and mother in law their new grandson in&amp;nbsp;my wife's old home town of Shanghai.&amp;nbsp;We also ventured to other areas of China. &lt;br /&gt;&lt;br /&gt;Rather than the historical centres of Beijing and Xian (as we did in 2007), we went to some more scenic and less populated areas in the South of China - and were inspired by the BBC documentary "Wild China" to go to Shangri-La and Guilin. Of course you can't do everything you want (especially with two yound kids) - but we saw as much as we could over 26 days.&amp;nbsp;Highlights of my China 2010 Trip were:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Hong Kong Disney&lt;/strong&gt;&lt;br /&gt;We got some free tickets as my brother-in-law&amp;nbsp;has&amp;nbsp;some good contacts in Hong Kong. One of the first things I noticed in the hotel is that Disney provides you with bath robes (for the pool areas) so it the large number of people walking around in robes made the hotel look disturbingly like a Disney-inspired mental institution!&lt;br /&gt;&lt;br /&gt;The fireworks were great on the first night:&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSA1CfzpDI/AAAAAAAAAgk/sjOjxUosZtw/s1600/DisneyTower.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="178" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSA1CfzpDI/AAAAAAAAAgk/sjOjxUosZtw/s320/DisneyTower.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the Jungle area, the whole family loved the &lt;strong&gt;&lt;em&gt;Leaky Tikis &lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSDFJRhH4I/AAAAAAAAAgw/XlIm76gUHAE/s1600/LeakyTikiLisa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSDFJRhH4I/AAAAAAAAAgw/XlIm76gUHAE/s320/LeakyTikiLisa.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;as well as the &lt;strong&gt;Jungle Cruise &lt;/strong&gt;(complete with cannibals, crocs, elephants and flames coming out of the water at the boat)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKSDjhn4u8I/AAAAAAAAAg0/Tfj0vsZE3m4/s1600/JungleCruise.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKSDjhn4u8I/AAAAAAAAAg0/Tfj0vsZE3m4/s320/JungleCruise.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We sat on the Alice in Wonderland ride 3 times because Heidi loved it so much. The Lion King musical show was also great fun for the kids.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSEDySuvzI/AAAAAAAAAg4/r6xDorZ_uQY/s1600/Wonderland.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSEDySuvzI/AAAAAAAAAg4/r6xDorZ_uQY/s320/Wonderland.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Lantau Island (and the Big Bronze Buddha)&lt;/strong&gt;Probably my favourite part of Hong Kong with some nice quiet walking tracks and cool breezes away from the bustle of the city.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSE6X-w43I/AAAAAAAAAg8/qj6oR20JUuA/s1600/LantauBuddha.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSE6X-w43I/AAAAAAAAAg8/qj6oR20JUuA/s320/LantauBuddha.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Heidi's Princess Photo Shoot in Shanghai&lt;/strong&gt;China's one-child policy makes any form of "child idolization" by parents acceptable (though we got it as a gift from her uncle in China). Heidi spent almost 3 hours and struck 100 poses for her photo shoot in various dresses and with swords. The story book you get at the end is amazing (in Chinese and in English)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSFV-lDJVI/AAAAAAAAAhA/RURjm8X2f_E/s1600/HeidiPhotoShoot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSFV-lDJVI/AAAAAAAAAhA/RURjm8X2f_E/s320/HeidiPhotoShoot.jpg" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dali and Cangshan Mountain, Fishing Birds on Erhai Lake, Horseriding. &lt;/strong&gt;One of the most pristine and tranquil places I've visited in China (though it was tough carrying both Zach and Heidi up the steep and slippery stone steps as they refused to walk). There's even a giant Chinese chess board nestled up in the mountains. The pineapple and watermelon&amp;nbsp;we purchased on the way down the mountain was bursting with flavour.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSHp1VQ3QI/AAAAAAAAAhE/e2Kk3cgnq9c/s1600/DaliWaterfall.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSHp1VQ3QI/AAAAAAAAAhE/e2Kk3cgnq9c/s320/DaliWaterfall.jpg" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSHwKDIofI/AAAAAAAAAhI/qX8MaWgZRNs/s1600/Dali.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSHwKDIofI/AAAAAAAAAhI/qX8MaWgZRNs/s320/Dali.jpg" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSHwgK1ZtI/AAAAAAAAAhM/MgPOnQdngvQ/s1600/HeidiZachDali.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSHwgK1ZtI/AAAAAAAAAhM/MgPOnQdngvQ/s320/HeidiZachDali.jpg" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSIk_nnNEI/AAAAAAAAAhQ/pwwpSUZfWiM/s1600/DaliWaterShrine.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSIk_nnNEI/AAAAAAAAAhQ/pwwpSUZfWiM/s320/DaliWaterShrine.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The fish-catching&amp;nbsp;ospreys were also pretty amazing.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSKJoXWdqI/AAAAAAAAAhY/gpDX7b_OKqg/s1600/FishCatchingBirds.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSKJoXWdqI/AAAAAAAAAhY/gpDX7b_OKqg/s320/FishCatchingBirds.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Staying in an old-style Chinese Hotel in Lijiang old town (kung-fu movies had been shot there) - and getting lost in the maze of stone walkways and waterways.&lt;/strong&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKSK6KoaPxI/AAAAAAAAAhc/B-jRpL0Z7ro/s1600/LijiangHotel.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TKSK6KoaPxI/AAAAAAAAAhc/B-jRpL0Z7ro/s320/LijiangHotel.jpg" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Tiger Leaping Gorge &lt;/strong&gt;The amount of water passing through after heavy rainfalls was impressive - but so are the landslides that happened a couple of weeks before we got there (and the tunnel system made available to pass around the landslide areas). &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSNR04Qc6I/AAAAAAAAAhg/YPEJWiG7huo/s1600/Tigerleaping.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSNR04Qc6I/AAAAAAAAAhg/YPEJWiG7huo/s320/Tigerleaping.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Video showing the sheer volume of water in the gorge can be seen here&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=DZ2aO0WbwYU"&gt;http://www.youtube.com/watch?v=DZ2aO0WbwYU&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Herds of random animals (Yaks, pigs, goats) stopping the cars in Shangri-La on a 2-lane highway&lt;/strong&gt;They were a bit better than the animals in Yellowstone National Park in the US as at least they had farmers cracking them with sticks to send them on their merry way. There were some Yaks that jumped in front of our bus though - thankfully we swerved in time. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSRDjecwNI/AAAAAAAAAhs/k6gLjsui0E8/s1600/YakJam.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSRDjecwNI/AAAAAAAAAhs/k6gLjsui0E8/s320/YakJam.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSUVHP6Q3I/AAAAAAAAAh0/0Z-C6A61Qz4/s1600/ShangriLaGrass.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSUVHP6Q3I/AAAAAAAAAh0/0Z-C6A61Qz4/s320/ShangriLaGrass.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The scenery around Shangri-La (esp. the clouds hanging around the mountains when at 4000m altitude) was amazing. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSTiQSBjpI/AAAAAAAAAhw/yCnSPWN1VTw/s1600/ShangriLaValley.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSTiQSBjpI/AAAAAAAAAhw/yCnSPWN1VTw/s320/ShangriLaValley.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;They the local shops try and flog oxygen to all the tourists before you get there. My recommendation is not to buy it - though the oxygen tanks are fun to play with.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Guilin Boat Cruise &lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSVgXWTZ4I/AAAAAAAAAh4/BZfeK_cKf_k/s1600/GuilinCruise.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;strong&gt;&lt;img border="0" height="179" px="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TKSVgXWTZ4I/AAAAAAAAAh4/BZfeK_cKf_k/s320/GuilinCruise.jpg" width="320" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Even the view from the hotel was amazing &lt;/strong&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSP4stw0MI/AAAAAAAAAho/8xTWkS70Sj4/s1600/GuilinHotel.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;strong&gt;&lt;img border="0" height="179" px="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSP4stw0MI/AAAAAAAAAho/8xTWkS70Sj4/s320/GuilinHotel.jpg" width="320" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Guilin was very popular with the western tourists (affectionately known to&amp;nbsp;some as White Devils). We even ran into some Indian Sydney-siders who live in the next suburb to us. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Shanghai Expo 2010&lt;/strong&gt;It was fun - but it was hugely busy (600,000 people per day visit) there was no way I'm going to wait for 4 hours to see the Germany exhibit. We got into the Spain exhibit right away though when we visited in the evening - one of the features of which was a giant puppet baby &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSWYCSbtOI/AAAAAAAAAh8/GVUH_185uiI/s1600/GiantBabyExpo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" px="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TKSWYCSbtOI/AAAAAAAAAh8/GVUH_185uiI/s320/GiantBabyExpo.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;My son Zach's New Remote Control Car and Toy Guns and a giant teddy bear.. &lt;/strong&gt;My father in law got some presents for the kids and they are still fighting over them. Zach looks like a little Arnie when he's carrying around the gun.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Eating Snake, Dog, Frog, Jellyfish and Snails &lt;/strong&gt;(I've had dog before - it's like beef except with a stronger flavour - quite nice). Snake is all bones and no meat so I couldn't approve.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Stone Forest in Kunming and Heidi and Zach's dancing to Chinese techno in Kunming&lt;/strong&gt;The Stone forest had some very nicely manicured gardens and had some of the most fragrant flowers and blooms I've ever seen.&lt;br /&gt;&lt;br /&gt;There was also a bridal expo in Kunming with a red carpet. The kids couldn't resist dancing their booties off on stage. As usual they attracted a lot of cameras and a crowd. Everyone loves to take photos of them - with the most common thing said is "piao liang" or "beautiful!" and "yung wa wa" ("foreign doll")&lt;br /&gt;&lt;br /&gt;You can check out Zach's dance class moves on youtube here:&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=EF_KwTULZEE"&gt;http://www.youtube.com/watch?v=EF_KwTULZEE&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The Chinese Massage House of &lt;em&gt;Pain&lt;/em&gt;&lt;/strong&gt;I've had a few foot massages in China - but the most painful massage I've ever (with my wife and brother-in-law) had was in a place called the Double-Rainbow Massage Parlour (sounds dodgy I know). I think they surgically enhance their elbows so they can cause as much excruciating pain as possible for extended periods of time.&lt;/li&gt;&lt;/ol&gt;During the trip to China, I lost a few kilos because we walked so much, and Lisa and I carried kids around so much. Also, Chinese food has way too many bones and not enough meat (In my opinion, not my wife's). Add to the fact that we were sweating 24x7 due to the pre-typhoon conditions (36 degree humidity that covered most of China) - and it was almost like a &lt;strong&gt;&lt;em&gt;month-long weight-loss bootcamp&lt;/em&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Next holiday will be to Phuket, Thailand (ie something closer to what we did in Vanuatu in May 2009) &lt;br /&gt;...Perhaps then Lisa and I will be able to breathe&amp;nbsp;and relax rather than&amp;nbsp;acting as human donkeys for our children :o)&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-471157451326888583?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/471157451326888583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=471157451326888583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/471157451326888583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/471157451326888583'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/10/back-from-china-trip-2010-hong-kong.html' title='Back from our China Trip 2010 (Hong Kong, Shanghai, Dali, Lijiang, Guilin, Shangri-La)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TKSA1CfzpDI/AAAAAAAAAgk/sjOjxUosZtw/s72-c/DisneyTower.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-348073748303588070</id><published>2010-08-27T11:07:00.000+10:00</published><updated>2010-08-27T11:07:45.940+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TechEd'/><title type='text'>Microsoft Tech Ed 2010 Gold Coast Meter-Maids in SMH...a bit of poor form?</title><content type='html'>I'll leave you to be the judge with these Photos from Tech Ed 2010&amp;nbsp;- &lt;a href="http://www.smh.com.au/technology/technology-news/meter-maids-stunt-backfires-at-microsoft-geek-gathering-20100826-13t2f.html"&gt;http://www.smh.com.au/technology/technology-news/meter-maids-stunt-backfires-at-microsoft-geek-gathering-20100826-13t2f.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;The organizers were fully aware of what they were doing and I thought it was on par with what you see at any motorshow - so didn't think much of it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-348073748303588070?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/348073748303588070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=348073748303588070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/348073748303588070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/348073748303588070'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/microsoft-tech-ed-2010-gold-coast-meter.html' title='Microsoft Tech Ed 2010 Gold Coast Meter-Maids in SMH...a bit of poor form?'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6627391982650706102</id><published>2010-08-25T19:54:00.000+10:00</published><updated>2010-08-25T19:54:28.675+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><title type='text'>Just got 900/1000 for Biztalk 2006 R2 Exam (70-241) at Australian Tech Ed 2010 on the Gold Coast!</title><content type='html'>The Biztalk exams don't have any official training materials. After trawling through 2 Apress Biztalk&amp;nbsp;books (including Apress Pro Biztalk 2009), all the Microsoft 2009 Virtual Labs&amp;nbsp;and a SoA Book (~1300 pages in total), I sat the exam this afternoon. &lt;br /&gt;&lt;br /&gt;As usual, many of the questions are slightly ambiguous and I did a lot of "um-ing" and "ahh-ing" before a decided to click the "Exit Exam" button. Thankfully the numbers went my way. Updated MCP logo including my Biztalk cert will appear soon!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6627391982650706102?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6627391982650706102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6627391982650706102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6627391982650706102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6627391982650706102'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/just-got-9001000-for-biztalk-2006-r2.html' title='Just got 900/1000 for Biztalk 2006 R2 Exam (70-241) at Australian Tech Ed 2010 on the Gold Coast!'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5773510778336637079</id><published>2010-08-23T15:13:00.005+10:00</published><updated>2010-08-23T15:21:32.678+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>"The one-way operation returned a non-null message with Action=''." Error when calling a SAP Web Service from a MS .NET WCF Client</title><content type='html'>I received the following exception today when attempting to call a new service in SAP PI (Process Integration), the equivalent of MS Biztalk in the SAP world:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;The one-way operation returned a non-null message with Action=''.&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Using WireShark, I looked in on the HTTP traffic:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/THH5SsjYbqI/AAAAAAAAAfM/5uhkS-WxI28/s1600/WireSharkTraceLoA.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/THH5SsjYbqI/AAAAAAAAAfM/5uhkS-WxI28/s320/WireSharkTraceLoA.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Looking closely, it turns out that SAP returns an &lt;strong&gt;Empty SOAP body in the response &lt;/strong&gt;(ie&amp;nbsp;NOT just a blank string/nothing) as per the screenshot below:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/THHyEuMDAaI/AAAAAAAAAfE/BDOV803mKiA/s1600/SAPEmptySOAPBody.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/THHyEuMDAaI/AAAAAAAAAfE/BDOV803mKiA/s320/SAPEmptySOAPBody.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;As discussed here &lt;a href="http://www.go4answers.com/Example/exception-while-making-way-call-wcf-56416.aspx"&gt;http://www.go4answers.com/Example/exception-while-making-way-call-wcf-56416.aspx&lt;/a&gt; &amp;nbsp; , there is a hotfix for the issue that can be found at &amp;nbsp;&lt;a href="http://forums.sdn.sap.com/message.jspa?messageID=9031931"&gt;http://forums.sdn.sap.com/message.jspa?messageID=9031931&lt;/a&gt;&amp;nbsp; &lt;br /&gt;- however the simplest fix is to handle the &lt;strong&gt;System.ServiceModel.ProtocolException &lt;/strong&gt;and effectively ignore this exception.&lt;/span&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;//Execute call&lt;br /&gt;            var client = WCFClientFactory.CreateClient&lt;si_empsave_async_outclient&gt;(CredentialType.PI);&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                client.SI_EmpSave_Async_Out(empObj);&lt;br /&gt;            }&lt;br /&gt;            catch (System.ServiceModel.ProtocolException ex) //Just handle this specific exception. &lt;br /&gt;            //Otherwise bubble up&lt;br /&gt;            {&lt;br /&gt;                if (!ex.Message.Equals("The one-way operation returned a non-null message with Action=''."))&lt;br /&gt;                    throw;&lt;br /&gt;            }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5773510778336637079?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5773510778336637079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5773510778336637079' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5773510778336637079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5773510778336637079'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/one-way-operation-returned-non-null.html' title='&quot;The one-way operation returned a non-null message with Action=&apos;&apos;.&quot; Error when calling a SAP Web Service from a MS .NET WCF Client'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/THH5SsjYbqI/AAAAAAAAAfM/5uhkS-WxI28/s72-c/WireSharkTraceLoA.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5605281951933215111</id><published>2010-08-12T13:43:00.003+10:00</published><updated>2010-08-12T13:52:32.208+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure Appliance'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Microsoft Windows Azure Platform WILL be available as an on-premise solution - via a Turnkey "Appliance"</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TGNunyTrv8I/AAAAAAAAAe8/xr6ddE3kb3M/s1600/WindowsAzure.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TGNunyTrv8I/AAAAAAAAAe8/xr6ddE3kb3M/s320/WindowsAzure.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;One of my biggest qualms about recommending a cloud-based solution (esp for sensitive data) is that the solution is then completely bound to hardware under a particular vendor's (e.g. Microsofts or Amazon's) control. This in turn makes it hard to sell to clients who typically like to have complete control over their data (whether this concern is well-founded is another debate).&lt;br /&gt;&lt;br /&gt;Last month, Microsoft made moves to circumvent this reaction by announcing an &lt;strong&gt;"Appliance"&lt;/strong&gt; - which is a specially configured box that will be able to be purchased for use in-house. Costs have not been announced - and it is only available to be used by a select pilot customers (in a "Limited Production Release")&amp;nbsp;like Dell, Ebay, HP and Fujitsu. &lt;br /&gt;&lt;br /&gt;However, it is a move in the right direction - to making the Azure business model appropriate in more business contexts - and without the variable (and somewhat unpredictable) expenses normally associated with a cloud-based (or any transaction/CPU cycle/storage fee-based)&amp;nbsp;solution. Yet they still retain many of the seamless scalability advantages offered by Azure.&lt;br /&gt;&lt;br /&gt;For more details on the Azure appliance, see:&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsazure/appliance/"&gt;http://www.microsoft.com/windowsazure/appliance/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5605281951933215111?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5605281951933215111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5605281951933215111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5605281951933215111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5605281951933215111'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/microsoft-windows-azure-platform-will.html' title='Microsoft Windows Azure Platform WILL be available as an on-premise solution - via a Turnkey &quot;Appliance&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TGNunyTrv8I/AAAAAAAAAe8/xr6ddE3kb3M/s72-c/WindowsAzure.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1111208793370324410</id><published>2010-08-12T12:35:00.001+10:00</published><updated>2010-08-12T13:20:56.542+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010 Licensing'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Team Foundation Server 2010 (TFS) Licensing Whitepaper</title><content type='html'>You can find a very comprehensive document on licensing TFS 2010 from Microsoft) at the following location &lt;br /&gt;&lt;a href="http://download.microsoft.com/download/7/B/1/7B18407A-AC79-4949-A318-A6636D96F497/Visual%20Studio%202010%20Licensing%20-%20Feb-2010.pdf"&gt;http://download.microsoft.com/download/7/B/1/7B18407A-AC79-4949-A318-A6636D96F497/Visual%20Studio%202010%20Licensing%20-%20Feb-2010.pdf&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;See page 15-20 for details on how TFS is licensed. You get 5 CALs out of the box which is a good deal for smaller development teams - plus no CALs are required for basic use of the worklists. It also details the User Vs Device CAL conditions, and how the External Connector License works.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note that you must get CALs for "internal" users - internal users cannot use the External connector license.&amp;nbsp; &lt;/strong&gt;The definition of External users is as follows (though this definition is somewhat vague and open to interpretation):&lt;br /&gt;&lt;em&gt;"External users are defined as users that are not employees of the organization or its affiliates, nor are they employees of the organization’s or its affiliates’ onsite contractors or agents."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1111208793370324410?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1111208793370324410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1111208793370324410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1111208793370324410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1111208793370324410'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/team-foundation-server-2010-tfs.html' title='Team Foundation Server 2010 (TFS) Licensing Whitepaper'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3192670006087420707</id><published>2010-08-10T17:48:00.001+10:00</published><updated>2010-08-10T17:49:01.247+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath Browser Based Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath Forms Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Active Directory'/><title type='text'>SharePoint 2007 - Finding Group Membership of Users (Active Directory or SharePoint) through UserProfileService.asmx</title><content type='html'>By using the&amp;nbsp;SharePoint 2007 (and above) Out-Of-The-Box "User Profile" Web Service found at the following location: &lt;br /&gt;&lt;a href="http://servername/_vti_bin/UserProfileService.asmx"&gt;&lt;em&gt;&lt;strong&gt;http://ServerName/_vti_bin/UserProfileService.asmx&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can easily obtain information about the group membership (both Active Directory and SharePoint Groups) of a particular user - not just their&amp;nbsp;basic user profile information (e.g. Mobile, Manager).&amp;nbsp;This can be done with the &lt;strong&gt;GetCommonMemberships() &lt;/strong&gt;method.&lt;br /&gt;&lt;br /&gt;In this way, &lt;strong&gt;without code and without directly accessing Active Directory/LDAP, &lt;/strong&gt;you can find the group memberships of a user for consumption in an InfoPath form by consuming it as a Web Service-based datasource.&lt;br /&gt;&lt;br /&gt;For implementation details of a code-free InfoPath consumption of this web service, see:&lt;strong&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://claytoncobb.wordpress.com/2009/07/19/infopath-user-roles-in-browser-enabled-forms-using-groups/"&gt;http://claytoncobb.wordpress.com/2009/07/19/infopath-user-roles-in-browser-enabled-forms-using-groups/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3192670006087420707?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3192670006087420707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3192670006087420707' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3192670006087420707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3192670006087420707'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/sharepoint-2007-finding-group.html' title='SharePoint 2007 - Finding Group Membership of Users (Active Directory or SharePoint) through UserProfileService.asmx'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5489688003616489568</id><published>2010-08-08T19:19:00.005+10:00</published><updated>2010-08-08T19:36:38.041+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='SSIS Object Model'/><title type='text'>Location of Microsoft.SqlServer.Dts.Runtime when Programmatically Running an SSIS 2008 Package</title><content type='html'>If you are having problems finding the DLL to reference to programmatically run an SSIS Package, you should find it in the following location:&lt;br /&gt;&lt;br /&gt;%Program files%\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll&lt;br /&gt;&lt;br /&gt;Take note that you may have several directories under %Program files%\Microsoft SQL Server\ if you have upgraded through different versions of SQL Server. Try looking through each of these to find the correct version of Microsoft.SQLServer.ManagedDTS.dll&lt;br /&gt;So assuming you installed it on C:\, you should find it in: &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For SQL 2005:&lt;/strong&gt;&lt;br /&gt;C:\Program files\Microsoft SQL Server\&lt;strong&gt;90&lt;/strong&gt;\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll&lt;br /&gt;&lt;strong&gt;For SQL 2008:&lt;/strong&gt;&lt;br /&gt;C:\Program files\Microsoft SQL Server\&lt;strong&gt;100&lt;/strong&gt;\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll&lt;br /&gt;&lt;br /&gt;If you still can't find the Assembly, make sure you've installed the Client Tools SDK as shown below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TF55gpGbd5I/AAAAAAAAAe0/-ab1XxWQxLE/s1600/SSISClientToolsSDK.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TF55gpGbd5I/AAAAAAAAAe0/-ab1XxWQxLE/s320/SSISClientToolsSDK.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5489688003616489568?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5489688003616489568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5489688003616489568' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5489688003616489568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5489688003616489568'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/location-of-microsoftsqlserverdtsruntim.html' title='Location of Microsoft.SqlServer.Dts.Runtime when Programmatically Running an SSIS 2008 Package'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TF55gpGbd5I/AAAAAAAAAe0/-ab1XxWQxLE/s72-c/SSISClientToolsSDK.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2118177809093479636</id><published>2010-08-08T16:43:00.007+10:00</published><updated>2010-08-12T13:22:07.960+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 2'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework 4'/><title type='text'>Entity Framework 4 Limitation - [System.NotSupportedException] - "LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."</title><content type='html'>I received this System.NotSupportedException at runtime (not design time) today when attempting a conversion of a Nullable Integer field to a string for population of an ASP.NET MVC 2 dropdownlist:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;"LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was&amp;nbsp;consuming an Entity Framework Datamodel indirectly (via a model) via a call to the &lt;strong&gt;Html.DropDownListFor() &lt;/strong&gt;method:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;&amp;lt;div class="editor-field"&amp;gt;&lt;br /&gt;&amp;lt;%: Html.DropDownListFor(model =&amp;gt; model.Year, ViewData.Model.YearList) %&amp;gt;&lt;br /&gt;&amp;lt;%: Html.ValidationMessageFor(model =&amp;gt; model.Year) %&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;The best workaround for this issue I've found (that keeps all processing happening in SQL Server rather than doing a client-side evaluation/enumeration) is using the &lt;b&gt;SqlFunctions.StringConvert&lt;/b&gt; method:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;public IEnumerable&lt;selectlistitem&gt; YearList &lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                var list = new WorkforceEntities().Collections;&lt;br /&gt;                return list.Select(a =&amp;gt; new SelectListItem()&lt;br /&gt;                {&lt;br /&gt;                    Text = SqlFunctions.StringConvert((double)a.FinancialYear),&lt;br /&gt;                    Value = SqlFunctions.StringConvert((double)a.FinancialYear.Value)&lt;br /&gt;                }).Distinct().ToList();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Unfortunately &lt;strong&gt;this is a limitation of the Entity Framework versions 1 and 2 - as .ToString() is not one of the supported CLR to Database Canonical Model translations&lt;/strong&gt; as detailed here: &lt;a href="http://msdn.microsoft.com/en-us/library/bb738681.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb738681.aspx&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Ensuring the server side evaluatation takes place is more important if we were filtering this list - but the golden rule and preferred outcome&amp;nbsp;is the same - to minimize the amount of data going across the wire.&lt;br /&gt;&lt;br /&gt;Checking SQL Profiler on the SQL server side, this evaluates to the following T-SQL in SQL Server:&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;SELECT &lt;br /&gt;[Distinct1].[C1] AS [C1], &lt;br /&gt;[Distinct1].[C2] AS [C2], &lt;br /&gt;[Distinct1].[C3] AS [C3]&lt;br /&gt;FROM ( SELECT DISTINCT &lt;br /&gt; 1 AS [C1], &lt;br /&gt; STR( CAST( [Extent1].[Quarter] AS float)) AS [C2], &lt;br /&gt; STR( CAST( [Extent1].[Quarter] AS float)) AS [C3]&lt;br /&gt; FROM [cfg].[Collection] AS [Extent1]&lt;br /&gt;)  AS [Distinct1]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Which is using all SQL Server Canonical Functions - as best practice (performance-wise) dictates.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2118177809093479636?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2118177809093479636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2118177809093479636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2118177809093479636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2118177809093479636'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/entity-framework-4-limitationerror-linq.html' title='Entity Framework 4 Limitation - [System.NotSupportedException] - &quot;LINQ to Entities does not recognize the method &apos;System.String ToString()&apos; method, and this method cannot be translated into a store expression.&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8867587939006340060</id><published>2010-08-07T16:57:00.002+10:00</published><updated>2010-08-07T17:00:09.829+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Office 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Integration Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SSIS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Office 2007'/><title type='text'>SSIS 2008 - "Unspecified error" and "Could not find installable ISAM" Errors After installing Office 2010 and Visual Studio 2010</title><content type='html'>I recently installed Office 2010 on&amp;nbsp;one of my&amp;nbsp;development machines.&amp;nbsp;Suddently, all of my SQL Server 2008 SSIS packages started to generate errors (when attempting to preview data outputs)&amp;nbsp;to the tune of:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TFz3lfk7YbI/AAAAAAAAAes/CUvFjo10frA/s1600/ISAMErrors-SSISPackageFailsAfterInstallOfOffice2010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TFz3lfk7YbI/AAAAAAAAAes/CUvFjo10frA/s320/ISAMErrors-SSISPackageFailsAfterInstallOfOffice2010.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Error at&amp;nbsp;&lt;em&gt;PackageName&lt;/em&gt; [Connection manager "ImportFileSource"]: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;An OLE DB record is available. Source: "Microsoft Access Database Engine" Hresult: 0x80004005 Description: "Unspecified error".&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Error at&amp;nbsp;&lt;em&gt;ImportDataTaskName&lt;/em&gt; [OLE DB Source 1 [3639]]: SSIS Error Code &lt;strong&gt;DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER&lt;/strong&gt;. The AcquireConnection method call to the connection manager "ImportFileSource" failed with error code 0xC0202009. There may be error messages posted before this with more information on why the AcquireConnection method call failed.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;ADDITIONAL INFORMATION:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Exception from HRESULT: 0xC020801C (Microsoft.SqlServer.DTSPipelineWrap)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The SSIS package tasks that had the issues were using a connection string&amp;nbsp;pointing to the&amp;nbsp;Office 12&amp;nbsp;OLEDB drivers like so:&lt;br /&gt;&lt;br /&gt;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\FileName.xlsx;Extended Properties="Excel 12.0";Persist Security Info=False"&lt;br /&gt;&lt;br /&gt;If&amp;nbsp;you then attempt to do a test run with the same connection string, it will also fail with the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Test connection failed because of an error in initializing provider. Could not find installable ISAM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFz0thzk30I/AAAAAAAAAek/ZwpA41e8PQ0/s1600/ISAMError2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFz0thzk30I/AAAAAAAAAek/ZwpA41e8PQ0/s320/ISAMError2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The&amp;nbsp;cleanest and most reliable way to fix this issue when&amp;nbsp;using 2007 drivers&amp;nbsp;(rather than attempting to reregister the neccessary dlls or if there are other issues), is to just just install or re-install the&amp;nbsp;&lt;strong&gt;"2007 Office System Driver: Data Connectivity Components"&lt;/strong&gt; - available at the following location:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7554f536-8c28-4598-9b72-ef94e038c891&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=7554f536-8c28-4598-9b72-ef94e038c891&amp;amp;displaylang=en&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Alternatively you could also just try re-registering the dlls as described here:&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/209805"&gt;http://support.microsoft.com/kb/209805&lt;/a&gt; &lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8867587939006340060?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8867587939006340060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8867587939006340060' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8867587939006340060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8867587939006340060'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/ssis-2008-unspecified-error-and-could.html' title='SSIS 2008 - &quot;Unspecified error&quot; and &quot;Could not find installable ISAM&quot; Errors After installing Office 2010 and Visual Studio 2010'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/TFz3lfk7YbI/AAAAAAAAAes/CUvFjo10frA/s72-c/ISAMErrors-SSISPackageFailsAfterInstallOfOffice2010.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-3512455475876065765</id><published>2010-08-04T20:36:00.005+10:00</published><updated>2010-08-04T20:42:42.138+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='Report Viewer'/><title type='text'>Fix - ASP.NET ReportViewer for SSRS not Rendering in IIS 7.0 or 7.5</title><content type='html'>Fix - If you are unable to render the ReportViewer Control on your ASP.NET Web pages while running on IIS7, the typical cause of this problem is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;When the ReportViewer control is added to Web Form (.aspx), the Reserved.ReportViewerWebControl.axd httpHandler is added to &lt;strong&gt;System.Web &lt;/strong&gt;section of the Web.Config file. &lt;strong&gt;In IIS7, it should be added under System.WebServer section.&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;IIS7 Handler Mappings does not contain the&amp;nbsp;Reserved.ReportViewerWebControl.axd httpHandler, and is therefore unable to render the ReportViewer elements needed by the JavaSript.&lt;/li&gt;&lt;/ol&gt;See &lt;a href="http://otkfounder.blogspot.com/2007/11/solving-reportviewer-rendering-issue-on.html"&gt;http://otkfounder.blogspot.com/2007/11/solving-reportviewer-rendering-issue-on.html&lt;/a&gt;&amp;nbsp; for a fix.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-3512455475876065765?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/3512455475876065765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=3512455475876065765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3512455475876065765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/3512455475876065765'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/aspnet-reportviewer-not-rendering-in.html' title='Fix - ASP.NET ReportViewer for SSRS not Rendering in IIS 7.0 or 7.5'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2591110859170744963</id><published>2010-08-04T20:08:00.008+10:00</published><updated>2010-08-04T20:40:29.099+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='IIS 7'/><title type='text'>Fix - IIS 7.0 and 7.5 Not Rendering CSS Files or other static content with Error 500 or Blank Pages</title><content type='html'>During a deployment for a client today of a custom ASP.NET application, IIS 7 refused to render&amp;nbsp;external css&amp;nbsp;files correctly - just spitting out Error&amp;nbsp;500 or blank&amp;nbsp;content.&amp;nbsp;&amp;nbsp;This happens because IIS 7 and 7.5 do NOT render static content by default - which is a little surprising but not completely unexpected.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To fix for Windows Server 2008:&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open up Start - Administrative Tools&amp;nbsp;- Server Manager on the Front End web server in question.&lt;/li&gt;&lt;li&gt;Select Web Server (IIS) under Roles &lt;/li&gt;&lt;li&gt;Click on "Add Role Services"&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFk_6D_tlmI/AAAAAAAAAeE/zUmcIjFGFUA/s1600/StaticContent.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFk_6D_tlmI/AAAAAAAAAeE/zUmcIjFGFUA/s320/StaticContent.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Enable the "Static Content" checkbox.&lt;/li&gt;&lt;li&gt;In IIS 7, Click on the Website and double click Handler Mappings &lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFlAhBUF8lI/AAAAAAAAAeM/MAqkSzZcnAc/s1600/StaticContent2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/TFlAhBUF8lI/AAAAAAAAAeM/MAqkSzZcnAc/s320/StaticContent2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;Right click on "StaticFile" and click "Edit" . &lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TFlBCz6x8tI/AAAAAAAAAeU/0rHxOX7-jOc/s1600/StaticContent3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" bx="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TFlBCz6x8tI/AAAAAAAAAeU/0rHxOX7-jOc/s320/StaticContent3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;In the Module Field add "StaticFileModule,DefaultDocumentModule" and click OK&lt;/li&gt;&lt;li&gt;&lt;strong&gt;DONE - FIXED!&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;The official support document for this on the MS site can be found here:&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/2196177"&gt;http://support.microsoft.com/kb/2196177&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2591110859170744963?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2591110859170744963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2591110859170744963' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2591110859170744963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2591110859170744963'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/fix-iis-7-not-rendering-css-files.html' title='Fix - IIS 7.0 and 7.5 Not Rendering CSS Files or other static content with Error 500 or Blank Pages'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D1pKsA4Vwno/TFk_6D_tlmI/AAAAAAAAAeE/zUmcIjFGFUA/s72-c/StaticContent.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8022767824396147961</id><published>2010-08-04T17:51:00.002+10:00</published><updated>2010-08-04T19:21:20.707+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Crystal Reports 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Installing the Crystal Reports Runtime on a Web Server when trying to deploy Crystal Reports Developed in Visual Studio 2008</title><content type='html'>My preference is to use SQL Server Reporting Services (SSRS) as an application reporting engine&amp;nbsp;where possible - but one of my clients had a requirement to create reports in Crystal Reports. The reports were designed in Visual Studio 2008&amp;nbsp;and consequently use the Crystal Reports 2008 Basic engine.&amp;nbsp;When you deploy an application onto a server, you will get an error in the event log and an image&amp;nbsp;placeholder where the report should be. &lt;br /&gt;&lt;br /&gt;If you want to deploy your app on a server, you'll also &lt;strong&gt;&lt;span style="color: red;"&gt;need to deploy the CR runtime &lt;/span&gt;&lt;span style="color: black;"&gt;for your reports to render correctly&lt;/span&gt;&lt;/strong&gt;. The official way to do this (rather than trying to install all the&amp;nbsp;DLLs you&amp;nbsp;can find to the gac) is to use the installer. The easiest way to get this is from your local drive (where you installed visual studio). It is typically located here:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;%Program Files%Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\CrystalReports10_5&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8022767824396147961?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8022767824396147961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8022767824396147961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8022767824396147961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8022767824396147961'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/08/installing-crystal-reports-runtime-on.html' title='Installing the Crystal Reports Runtime on a Web Server when trying to deploy Crystal Reports Developed in Visual Studio 2008'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5148430699416556929</id><published>2010-07-28T20:11:00.002+10:00</published><updated>2010-08-04T17:52:46.018+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Using SharePoint 2007 and SharePoint 2010 with Encrypted Databases</title><content type='html'>With SQL 2008, a new facility is provided called "TDE" or "Transparent Data Encryption". This is sometimes required by clients whose corporate governance rules require files in a filesystem to be encrypted.&amp;nbsp;What do you have to do to get this working with SharePoint 2007 or SharePoint 2010? &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #cc0000;"&gt;Nothing!&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;As the name of the feature suggests, you simply have to set it up on the SQL Server side (as per &lt;a href="http://technet.microsoft.com/en-us/library/bb934049(SQL.100).aspx"&gt;http://technet.microsoft.com/en-us/library/bb934049(SQL.100).aspx&lt;/a&gt;), and your underlying database files (and SharePoint Content) and any backups thereof will be encrypted without any extra effort on your part. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5148430699416556929?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5148430699416556929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5148430699416556929' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5148430699416556929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5148430699416556929'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/07/using-sharepoint-2007-and-sharepoint.html' title='Using SharePoint 2007 and SharePoint 2010 with Encrypted Databases'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5470753485427656771</id><published>2010-07-23T17:22:00.008+10:00</published><updated>2010-07-23T17:48:00.065+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ to Objects'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ 2 SQL'/><title type='text'>LINQ to Objects - Performing a wildcard (LIKE in SQL) match between 2 different lists (aka Converting For Loops to LINQ queries or a Cool Feature of Resharper)</title><content type='html'>We'll start with an example. How would I get a list of any items in the "letterList" List&lt;string&gt; below that matches (ie &lt;strong&gt;Contains&lt;/strong&gt;) any of the numbers in the "numbersList" List&lt;string&gt; below? &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var letterList = new List&amp;lt;string&amp;gt;() { "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4"};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;var numberList = new List&amp;lt;string&amp;gt;() { "1", "2", "3" }; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We could do this in a looping fashion, or we could use LINQ to perform the query in a more declarative fashion.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For loop solution:&lt;/strong&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;[TestMethod]&lt;br /&gt;public void TestForEach()&lt;br /&gt;{&lt;br /&gt;    //We want all items in the letterList that wildcard &lt;br /&gt;    //match numbers in the numberList. The output for this example should&lt;br /&gt;    //not include any items in the letterlist with "4" as it is not in the &lt;br /&gt;    var letterList = new List&amp;lt;string&amp;gt;() { "A1", "A2", "A3", "A4", &lt;br /&gt;        "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4"};&lt;br /&gt;    var numberList = new List&amp;lt;string&amp;gt;() { "1", "2", "3" };&lt;br /&gt;    var outputList = new List&amp;lt;string&amp;gt;();&lt;br /&gt;&lt;br /&gt;    foreach (var letter in letterList)&lt;br /&gt;    {&lt;br /&gt;        foreach (var number in numberList)&lt;br /&gt;&lt;br /&gt;            if (letter.Contains(number))&lt;br /&gt;            {&lt;br /&gt;                outputList.Add(letter);&lt;br /&gt;            }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;How would we do this in LINQ?&lt;/b&gt;&lt;br /&gt;One of the problems is that the LINQ Contains method only matches one value at a time (not Numbers 1,2,3 at the same time). We also can't use a normal LINQ equijoin as the LINQ join syntax doesn't support wildcard matches.&lt;br /&gt;&lt;br /&gt;The answer is to do the below:&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;[TestMethod]&lt;br /&gt;public void TestForEachLINQ()&lt;br /&gt;{&lt;br /&gt;    //We want all items in the letterList that wildcard &lt;br /&gt;    //match numbers in the numberList. The output for this example should&lt;br /&gt;    //not include any items in the letterlist with "4" as it is not in the &lt;br /&gt;    var letterList = new List&amp;lt;string&amp;gt;() { "A1", "A2", "A3", "A4", &lt;br /&gt;        "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4"};&lt;br /&gt;    var numberList = new List&amp;lt;string&amp;gt;() { "1", "2", "3" };&lt;br /&gt;    var outputList = (&lt;br /&gt;        from letter in letterList &lt;br /&gt;        from number in numberList &lt;br /&gt;        where letter.Contains(number) select letter).ToList();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This effectively does a wildcard match between 2 different lists. When you look at it, it really is very similar to a SQL Server wildcard join - but just using a WHERE statement.&lt;br /&gt;&lt;br /&gt;The simplest wayway to make a conversion like this is to use one of the new features of Resharper 5 - the &lt;strong&gt;"Convert Part of body into LINQ-expression"&lt;/strong&gt; refactoring functionality. This will automatically convert the for each syntax to the declarative LINQ syntax. EASY!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/TElC6KjrUpI/AAAAAAAAAd8/rYtz32TQVxU/s1600/ConvertForToLINQ.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="105" hw="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/TElC6KjrUpI/AAAAAAAAAd8/rYtz32TQVxU/s400/ConvertForToLINQ.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5470753485427656771?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5470753485427656771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5470753485427656771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5470753485427656771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5470753485427656771'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/07/linq-performing-wildcard-match-between.html' title='LINQ to Objects - Performing a wildcard (LIKE in SQL) match between 2 different lists (aka Converting For Loops to LINQ queries or a Cool Feature of Resharper)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/TElC6KjrUpI/AAAAAAAAAd8/rYtz32TQVxU/s72-c/ConvertForToLINQ.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7895016638216364200</id><published>2010-07-13T20:56:00.003+10:00</published><updated>2010-07-15T15:22:38.503+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT Disasters'/><title type='text'>Anatomy of an IT Disaster - How the IBM/SAP/Workbrain Queensland Health Payroll System Project Failed</title><content type='html'>There has been a lot of media interest in the &lt;strong&gt;&lt;em&gt;failed SAP payroll project at Queensland Health &lt;/em&gt;&lt;/strong&gt;recently. It has been termed as an "&lt;strong&gt;unprecedented failure of public administration&lt;/strong&gt;''. Just today in the Australian Financial Review, it was stated that even the superannuation calculations have become a tangled web of manual overrides and inconsistency (due to the&amp;nbsp;original payroll amounts&amp;nbsp;being incorrectly calculated).&amp;nbsp;There is also going to be an internal government hearing today to work out how this failure happened. Surprisingly&amp;nbsp;though, the Queensland Minister for Health will apparently keep his&amp;nbsp;job (as per the following news article in The Australian&amp;nbsp;Newspaper &lt;a href="http://www.theaustralian.com.au/australian-it/minister-keeps-job-despite-queensland-health-payroll-debacle/story-e6frgakx-1225886060838"&gt;http://www.theaustralian.com.au/australian-it/minister-keeps-job-despite-queensland-health-payroll-debacle/story-e6frgakx-1225886060838&lt;/a&gt;).&amp;nbsp;Now &lt;strong&gt;disaster&lt;/strong&gt; on such a large scale (like a large train crash) drew my curiosity and I just had to ask:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;How did this massive project failure happen, and how did it go so wrong, so far, &amp;nbsp;for so long?&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This blog article is something akin to "Air Crash Investigation" on TV - but&amp;nbsp;from an IT software perspective.&amp;nbsp;As the US philosopher George Santayana (1905) said - "Those who cannot remember the past are condemned to repeat it." - and I'd like to learn from such a systemic failure in the Australian IT context.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Project Statistics:&lt;/strong&gt;&lt;br /&gt;The project was large by anyones's measure:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TDxE8nZpzII/AAAAAAAAAd0/ZmSNxAXmhv8/s1600/FailedITProjects1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rw="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TDxE8nZpzII/AAAAAAAAAd0/ZmSNxAXmhv8/s320/FailedITProjects1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;More recently, blame has been levelled at problems sourcing from the management by the CorpTech Shared Services - as per this computerworld article:(&lt;a href="http://www.computerworld.com.au/article/352346/corptech_called_account_shared_services_failing/"&gt;http://www.computerworld.com.au/article/352346/corptech_called_account_shared_services_failing/&lt;/a&gt;).&lt;br /&gt;I know some SAP developers who worked on the project&amp;nbsp;and they had some explanations as to what the &lt;strong&gt;main reasons for failure&lt;/strong&gt;. They bailed out themselves as they could see the trainwreck that would happen down the line. They identified that IBM wasn't the sole point of failure - &lt;em&gt;they were simply&amp;nbsp;the last company to try and come in and fix the mess&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;The Queensland Government is now attempting to sue IBM even though it has signed the application off as satisfactory. In terms of fallout from the disaster, the 2 top people in Queensland IT have been sacked, and it is likely that CorpTech middle managers involved will be disbanded.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Problems with the Queensland Health Project (aka Project Post-Mortem):&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Project Management Issue] There was&amp;nbsp;NO contingency plan (aka "Plan B") in place in case the payroll system went belly up (and it did). &lt;/span&gt;&lt;span style="color: black;"&gt;Way too much trust was put into the&amp;nbsp;contractors to deliver a perfect, bug free result (no real-world software is 100% bug free) and not enough&amp;nbsp;common sense was used&amp;nbsp;to mitigate&amp;nbsp;risks.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Project Management Issue/Testing and Reporting Issues]&lt;/span&gt; - &lt;span style="color: red;"&gt;Testing Plan and Numbers were fiddled (!)&amp;nbsp;so the application passed testing criteria&amp;nbsp;&lt;/span&gt;- According to the Courier Mail Newspaper article(&lt;a href="http://www.couriermail.com.au/news/queensland/queensland-health-payroll-fallout-to-reshape-awards/story-e6freoof-1225885400871"&gt;http://www.couriermail.com.au/news/queensland/queensland-health-payroll-fallout-to-reshape-awards/story-e6freoof-1225885400871&lt;/a&gt; - they (quite heinously) fiddled the numbers - &lt;em&gt;&lt;strong&gt;"Instead of slowing the process, the project board agreed to revise the definition of Severity 1 and 2 defects – effectively shifting the goalposts so the project passed exit criteria."&lt;/strong&gt;&lt;/em&gt; &lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Project Management Issue]&lt;/span&gt; - There was no parallel run for the payroll between the WorkBrain System and SAP Payroll. &lt;strong&gt;This is what was recommended by SAP itself.&lt;/strong&gt; I've had the SAP QA team come out to my clients and they do a pretty thorough job.&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Project Management Issue] &lt;/span&gt;- There should have been a Gradual Rollout (you can't do&amp;nbsp;ANY large payroll system in one hit/using a "big-bang"&amp;nbsp;approach).&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Architecture Issue]&amp;nbsp;&lt;/span&gt;- The Architectural design is questionable. The Integration between the 2 systems is wrong - as WorkBrain rostering is writing &lt;strong&gt;directly &lt;/strong&gt;to SAP (using flat files to pump data into SAP) rather than using&amp;nbsp;the timesheets as the intermediary entry mechanism&amp;nbsp;first. SAP Payroll systems are effectively bypassed by using WorkBrain and a bespoke system for payroll calculation and generation.&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Testing Issue - Government Due Diligence Issue]&lt;/span&gt; &amp;nbsp;- The system&amp;nbsp;had been signed off by Queensland Government without proper checking on their part (they are subsequently trying to disavow themselves of this responsibility though the end decision&amp;nbsp;to go live was theirs and done through their project board). &lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Architecture and Project Management Issue] - &lt;/span&gt;&lt;span style="color: black;"&gt;Whether WorkBrain should have been used at all as it is a rostering application. Other States have just SAP systems and they operate acceptably.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Project Management/Procedural&amp;nbsp;Issue]&lt;/span&gt; A failure of a contractor [IBM] and CorpTech to Follow SAP's recommendations.&lt;/li&gt;&lt;li&gt;&lt;span style="color: red;"&gt;[Change Management Issues/Lack of training] &lt;strong&gt;- &lt;/strong&gt;&lt;span style="color: black;"&gt;The training plans for this project were&amp;nbsp;very limited and didn't take account of the difficulty in operating&amp;nbsp;a new payroll system.&lt;/span&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="color: black;"&gt;DDK&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;[NOTE: I have no affiliations to IBM/Queensland Government/SAP]&lt;/em&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7895016638216364200?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7895016638216364200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7895016638216364200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7895016638216364200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7895016638216364200'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/07/anatomy-of-it-disaster-how.html' title='Anatomy of an IT Disaster - How the IBM/SAP/Workbrain Queensland Health Payroll System Project Failed'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TDxE8nZpzII/AAAAAAAAAd0/ZmSNxAXmhv8/s72-c/FailedITProjects1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-9112589270726352016</id><published>2010-07-13T19:10:00.007+10:00</published><updated>2010-07-13T19:23:20.705+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint SAP Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Fix for WCF Client Proxy deserialization issue (related to svcutil.exe) when referencing Non-Microsoft Services (e.g. SAP services from SharePoint) - "Unable to generate a temporary class (result=1)."</title><content type='html'>When creating a client proxy for the SAP Service Registry (so I could dynamically set endpoints&amp;nbsp;for my other WCF client calls), I had the following issue today when running a unit test:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;Test method DDK.UnitTest.UDDIProxyTest.GetEndPointBasicTest threw exception: System.ServiceModel.CommunicationException: There was an error in serializing body of message findServiceDefinitionsRequest: 'Unable to generate a temporary class (result=1).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;error CS0030: Cannot convert type 'DDK.BusinessService.UDDIRegistrySearchProxy.classificationPair[]' to 'DDK.BusinessService.UDDIRegistrySearchProxy.classificationPair'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;This error&amp;nbsp;is a result of issues with .NET commandline tools wsdl.exe or svcutil.exe incorrectly creating multidimensional arrays in the strongly typed proxy class (Reference.cs), as per screenshot below:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TDwrWMVrnCI/AAAAAAAAAds/ZW9l6it1Ekc/s1600/MultiDimensionalArray.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rw="true" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TDwrWMVrnCI/AAAAAAAAAds/ZW9l6it1Ekc/s320/MultiDimensionalArray.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Cause:&lt;/strong&gt;&lt;br /&gt;This problem occurs when the&amp;nbsp;svcutil.exe or the Web Services Description Language Tool (Wsdl.exe) are used to generate the client information. When you publish a schema that contains &lt;strong&gt;nested nodes that have the maxOccurs attribute set to the "unbounded" value&lt;/strong&gt;, these tools&amp;nbsp;create multidimensional arrays in the generated datatypes.cs file. Therefore, the generated Reference.cs file contains incorrect types for the nested nodes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The problem and fix is described in the following kb articles:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://support.microsoft.com/kb/891386"&gt;http://support.microsoft.com/kb/891386&lt;/a&gt; and&amp;nbsp; &lt;/strong&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/326790/en-us"&gt;&lt;strong&gt;http://support.microsoft.com/kb/326790/en-us&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The fix is to basically change the multi-dimensional array in the Reference.cs file related to your service reference&amp;nbsp;to a single dimension. &lt;br /&gt;e.g. &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;classificationPair[] [] &lt;br /&gt;&lt;/pre&gt;instead becomes&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;classificationPair[] &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note that you will of course need to update all parameter references in the Reference.cs file to this multi-dimensional array, not just the original declarations.&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-9112589270726352016?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/9112589270726352016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=9112589270726352016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9112589270726352016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9112589270726352016'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/07/wcf-client-proxy-deserialization-issue.html' title='Fix for WCF Client Proxy deserialization issue (related to svcutil.exe) when referencing Non-Microsoft Services (e.g. SAP services from SharePoint) - &quot;Unable to generate a temporary class (result=1).&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TDwrWMVrnCI/AAAAAAAAAds/ZW9l6it1Ekc/s72-c/MultiDimensionalArray.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5962424178829290157</id><published>2010-06-21T11:39:00.000+10:00</published><updated>2010-06-21T11:49:54.573+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Deployment Issues'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>Error when Deploying Solutions in SharePoint using stsadm - "The farm is unavailable" and "Object reference not set to an instance of an object."</title><content type='html'>If you receive errors when Deploying Solutions in SharePoint using stsadm - such as "The farm is unavailable" and "Object reference not set to an instance of an object.", then you have a permissions issue.&lt;br /&gt;&lt;br /&gt;You will typically get errors like this when running stsadm commands such as those found in this PowerShell script snippet below:&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;if ($isValidConfig -eq "true")&lt;br /&gt;{&lt;br /&gt; Write-Host "Retracting Solution -  SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o retractsolution -name SolutionName.wsp -immediate -url $siteUrl&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "Deleting Solution -  SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o deletesolution -name SolutionName.wsp -override&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "Adding Solution -  SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o addsolution -filename SolutionName.wsp &lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "Deploying Solution -  SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o deploysolution -name SolutionName.wsp -url $siteUrl -immediate -allowgacdeployment -force&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "Activating Feature - SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o activatefeature -name FeatureName -url $siteUrl -force&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "OPERATION COMPLETE - SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt; Write-Host "Resetting IIS so we avoid 'Unknown Error' or 'File Not Found' errors - SERVER:$computer, SITE:$siteUrl" -Fore DarkGreen&lt;br /&gt; iisreset&lt;br /&gt; stsadm -o execadmsvcjobs&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Errors that occur with the script if you don't have correct permissons on the SharePoint configuration database:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/TB7DWKp3DsI/AAAAAAAAAdk/ycl5EA62EfQ/s1600/PermissionsError.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/TB7DWKp3DsI/AAAAAAAAAdk/ycl5EA62EfQ/s320/PermissionsError.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You should have dbo permissions to the Configuration database for your farm. See my related article for details on the permissions you need for solution deployment - &lt;a href="http://ddkonline.blogspot.com/2010/03/list-of-permissions-required-for.html"&gt;http://ddkonline.blogspot.com/2010/03/list-of-permissions-required-for.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5962424178829290157?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5962424178829290157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5962424178829290157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5962424178829290157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5962424178829290157'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/06/error-when-deploying-solutions-in.html' title='Error when Deploying Solutions in SharePoint using stsadm - &quot;The farm is unavailable&quot; and &quot;Object reference not set to an instance of an object.&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/TB7DWKp3DsI/AAAAAAAAAdk/ycl5EA62EfQ/s72-c/PermissionsError.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7865995212376142300</id><published>2010-06-21T11:28:00.000+10:00</published><updated>2010-06-21T11:28:47.247+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><title type='text'>How to change the Read Only Attribute of Files in Powershell using a Visual Studio Pre-Build command (ie not using the DOS attrib command)</title><content type='html'>When using Microsoft PowerShell 2.0, you can just put this in your Visual Studio project pre-build event to remove the read-only attribute on binary files:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;$(ProjectDir)FixTemplateFolderAttributes.cmd $(ProjectDir)&lt;/b&gt;&lt;br /&gt;This points to a command file in your project directory called "FixTemplateFolderAttributes.cmd" like so:&lt;br /&gt;&lt;br /&gt;:: Changes file attributes as needed.&lt;br /&gt;cd %1&lt;br /&gt;powershell Set-ExecutionPolicy RemoteSigned&lt;br /&gt;powershell ../Build/Scripts/FixTemplateFolderAttributes.ps1&lt;br /&gt;&lt;br /&gt;This calls the following powershell commands to make files writable:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;$computer = gc env:computername&lt;br /&gt;&lt;br /&gt;$fileList = Get-ChildItem ".\InfoPath Form Template" | Where-Object {$_.name -like "*.dll" -or $_.name -like "*.pdb" -or $_.name -like "*.xsf"  }&lt;br /&gt;&lt;br /&gt;foreach ($fileItem in $fileList) &lt;br /&gt;{&lt;br /&gt; $fileItem.set_IsReadOnly($false) # Remove readonly flag&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$fileList = Get-ChildItem ".\obj\Debug\" | Where-Object {$_.name -like "*.dll" -or $_.name -like "*.pdb" -or $_.name -like "*.txt"}&lt;br /&gt;&lt;br /&gt;foreach ($fileItem in $fileList) &lt;br /&gt;{&lt;br /&gt; $fileItem.set_IsReadOnly($false) # Remove readonly flag&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$fileList = Get-ChildItem ".\bin\Debug\" | Where-Object {$_.name -like "*.dll" -or $_.name -like "*.pdb" -or $_.name -like "*.txt"}&lt;br /&gt;&lt;br /&gt;foreach ($fileItem in $fileList) &lt;br /&gt;{&lt;br /&gt; $fileItem.set_IsReadOnly($false) # Remove readonly flag&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;DDK&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7865995212376142300?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7865995212376142300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7865995212376142300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7865995212376142300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7865995212376142300'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/06/how-to-change-read-only-attribute-of.html' title='How to change the Read Only Attribute of Files in Powershell using a Visual Studio Pre-Build command (ie not using the DOS attrib command)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-7018198231148735248</id><published>2010-05-31T18:10:00.002+10:00</published><updated>2010-10-11T15:36:08.526+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Slow'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Performance Issues'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Troubleshooting'/><title type='text'>Fix - SharePoint Very slow to start after an IISRESET or Recycle of App Pool (30-130 seconds)</title><content type='html'>I was asked by another team at my current client to look at a performance issue that they'd been having major issues with. There were no&amp;nbsp;obvious errors in the Windows Event Log&amp;nbsp;or SharePoint logs related to the issue.&amp;nbsp;The problem was that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If the application pool is recycled, it would take around &lt;strong&gt;&lt;span style="color: red;"&gt;90-120 seconds for the first page to be served&lt;/span&gt;.&lt;/strong&gt; This would be unacceptable to the client in case the App pool was recycled in the middle of the day - it would mean 2 minutes of downtime for all employees.&lt;/li&gt;&lt;li&gt;A similar issue with after an IIS reset was performed - it also happened with ALL sites, not just one or two.&lt;/li&gt;&lt;/ol&gt;To diagnose the issue, I did the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ANY performance improvement should be measurable. So I used the Fiddler Web Debugger (&lt;a href="http://www.fiddler2.com/fiddler2/"&gt;http://www.fiddler2.com/fiddler2/&lt;/a&gt;)&amp;nbsp;&amp;nbsp;to measure the total request time. Time was 84 seconds on this particular test server.&lt;/li&gt;&lt;li&gt;Used Sysinternals Process Explorer to see what the threads were doing. This revealed little - but it was clear that the process wasn't 100% the whole time so it wasn't a problem related to intensive CPU processing.&lt;/li&gt;&lt;li&gt;I enabled ASP.NET tracing at the application level as per &lt;a href="http://msdn.microsoft.com/en-us/library/1y89ed7z(VS.71).aspx"&gt;http://msdn.microsoft.com/en-us/library/1y89ed7z(VS.71).aspx&lt;/a&gt; and viewed the trace log through &lt;a href="http://servername/Pages/Trace.axd"&gt;http://servername/Pages/Trace.axd&lt;/a&gt;. However, looking at the load of the control tree - nothing was taking a particularly long time. Even when the trace.axd was loading up, it would take an inordinately long time to start up and server the first requested page. This ruled out the possibility of it being a slow control being rendered.&lt;/li&gt;&lt;li&gt;I created a completely new web application in SharePoint and it exhibited the same problem. I began to suspect machine-level config settings.&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/TANrNYsTw3I/AAAAAAAAAdU/T6BV8_GF8ac/s1600/FiddlerFoundIssue.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" height="112" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/TANrNYsTw3I/AAAAAAAAAdU/T6BV8_GF8ac/s320/FiddlerFoundIssue.jpg" width="320" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;li&gt;I found and fixed several errors in the Windows Event Log and Sharepoint Log but they made no difference.&lt;/li&gt;&lt;li&gt;I began to look at the Fiddler trace while testing again and by chance &lt;strong&gt;noticed that requests were also being made to an external address at Microsoft for code signing certificates&lt;/strong&gt;. I thought this was unusual - so did a bit of research and found that it was checking for a revoked certificates list on a Microsoft web server. This is done when any of the cryptography calls are performed. Some details about this can be found here - but the article is related to Exchange specifically:&lt;br /&gt;&lt;a href="http://msexchangeteam.com/archive/2010/05/14/454877.aspx"&gt;http://msexchangeteam.com/archive/2010/05/14/454877.aspx&lt;/a&gt; &amp;nbsp; &lt;/li&gt;&lt;li&gt;To work around the issue, I tried the registry entries suggested by &lt;a href="http://msexchangeteam.com/archive/2010/05/14/454877.aspx"&gt;http://msexchangeteam.com/archive/2010/05/14/454877.aspx&lt;/a&gt;, but it didn't&amp;nbsp;seem to work.&amp;nbsp;What DID work was pointing the hosts file&amp;nbsp;so that&amp;nbsp;crl.microsoft.com would resolve to&amp;nbsp;the local host (127.0.0.1).&amp;nbsp;&amp;nbsp;This meant that the call would much more quickly fail when it tries to access the &lt;strong&gt;certificate revoke list&lt;/strong&gt; at &lt;a href="http://crl.microsoft.com/pki/crl/products/CSPCA.crl"&gt;http://crl.microsoft.com/pki/crl/products/CSPCA.crl&lt;/a&gt; and &lt;a href="http://crl.microsoft.com/pki/crl/products/CodeSignPCA2.crl"&gt;http://crl.microsoft.com/pki/crl/products/CodeSignPCA2.crl&lt;/a&gt;, and not hold up the loading of Applications on the SharePoint server.&lt;/li&gt;&lt;li&gt;After the HOSTs file change, &lt;span style="color: red;"&gt;&lt;strong&gt;recycle time (and reset time) went from 84 seconds to 20 seconds.&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;em&gt;Hopefully this blog entry helps someone else with diagnosing this slowdown problem. Note that this fix only applies if your server doesn't have access to the internet - &lt;strong&gt;it is a problem specific to offline or intranet servers.&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;[UPDATE] - Found that someone else encountered this same issue as per &lt;br /&gt;&lt;a href="http://blogs.technet.com/b/markrussinovich/archive/2009/05/26/3244913.aspx"&gt;http://blogs.technet.com/b/markrussinovich/archive/2009/05/26/3244913.aspx&lt;/a&gt; and&lt;a href="http://www.muhimbi.com/blog/2009/04/new-approach-to-solve-sharepoints.html"&gt;&lt;br /&gt;http://www.muhimbi.com/blog/2009/04/new-approach-to-solve-sharepoints.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The first article suggests the use of an XML file in each config - but I've not tested this out:&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt; &lt;br /&gt;&amp;lt;configuration&amp;gt; &lt;br /&gt;      &amp;lt;runtime&amp;gt; &lt;br /&gt;              &amp;lt;generatePublisherEvidence enabled="false"/&amp;gt; &lt;br /&gt;      &amp;lt;/runtime&amp;gt; &lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;[UPDATE - 11 October 2010]&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;One of my colleagues from Oakton had a similar issue and the above fix (using the hosts file) didn't work for them. &lt;br /&gt;&lt;br /&gt;One of the fixes that did work was to do the following:&lt;br /&gt;&lt;em&gt;"Disable the CRL check by modifying the registry for all user accounts that use STSADM and all service accounts used by SharePoint. Find yourself a group policy wizard or run the vbscript at the end of this posting to help you out. Alternatively you can manually modify the registry for each account: &lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;[HKEY_USERS\&lt;userid&gt;\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]&lt;/em&gt;&lt;br /&gt;&lt;em&gt;"State"=dword:00023e00 "&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The following script applies the registry change to all users on a server. This will solve the spin-up time for the service accounts, interactive users and new users. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;const HKEY_USERS = &amp;amp;H80000003 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;strComputer = "." &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _ &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;amp; strComputer &amp;amp; "\root\default:StdRegProv") &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;strKeyPath = "" &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;objReg.EnumKey HKEY_USERS, strKeyPath, arrSubKeys &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;strKeyPath = "\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing" &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;For Each subkey In arrSubKeys &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp; objReg.SetDWORDValue HKEY_USERS, subkey &amp;amp; strKeyPath, "State", 146944 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Next&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-7018198231148735248?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/7018198231148735248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=7018198231148735248' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7018198231148735248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/7018198231148735248'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/fix-sharepoint-very-slow-to-start-after.html' title='Fix - SharePoint Very slow to start after an IISRESET or Recycle of App Pool (30-130 seconds)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D1pKsA4Vwno/TANrNYsTw3I/AAAAAAAAAdU/T6BV8_GF8ac/s72-c/FiddlerFoundIssue.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5908435043156638884</id><published>2010-05-26T01:50:00.000+10:00</published><updated>2010-05-26T01:51:30.372+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2009'/><title type='text'>Warning - BizTalk Server 2009 and SQL Server 2008 R2 are incompatible - wait for BizTalk 2010 (aka BizTalk 2009 R2) for "realignment" of compatibility</title><content type='html'>During installation of Biztalk 2009 tonight I found that SQL Server 2008 R2 and 2009 are in fact incompatible - I couldn't ever get the BizTalk group to install as it was giving errors in the log like so:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;2010-05-26 01:30:09:0039 [WARN] AdminLib GetBTSMessage: hrErr=c0c02524; Msg=Failed to create Management database "BizTalkMgmtDb" on server "SERVER01".&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You will also get a message box with just a hex code of &lt;span style="color: red;"&gt;"0xC0C02524" &lt;/span&gt;&lt;span style="color: black;"&gt;as below:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/S_vxY_hKpkI/AAAAAAAAAdM/K0Vm4T2iVkw/s1600/Biztalk2009Error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/S_vxY_hKpkI/AAAAAAAAAdM/K0Vm4T2iVkw/s320/Biztalk2009Error.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;I tried manually creating the database - but then it started to give errors with the stored procedure creation.&lt;/span&gt;&lt;/span&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;The below blog matches what I experienced during BizTalk 2009 Group Configuration:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/biztalkcpr/archive/2009/11/09/biztalk-09-and-sql-r2-not-supported-biztalk-09-and-project-references.aspx"&gt;http://blogs.msdn.com/b/biztalkcpr/archive/2009/11/09/biztalk-09-and-sql-r2-not-supported-biztalk-09-and-project-references.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5908435043156638884?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5908435043156638884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5908435043156638884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5908435043156638884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5908435043156638884'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/warning-biztalk-server-2009-and-sql.html' title='Warning - BizTalk Server 2009 and SQL Server 2008 R2 are incompatible - wait for BizTalk 2010 (aka BizTalk 2009 R2) for &quot;realignment&quot; of compatibility'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/S_vxY_hKpkI/AAAAAAAAAdM/K0Vm4T2iVkw/s72-c/Biztalk2009Error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-17171343510612082</id><published>2010-05-25T21:17:00.000+10:00</published><updated>2010-05-26T01:04:02.760+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk 2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Biztalk'/><title type='text'>Fix - When Configuring BizTalk 2009 - "Failed to connect to the SQL database SSODB on SQL Server SERVERNAME"</title><content type='html'>If you get the error "Failed to connect the the SQL database SSODB on SQL Server SERVERNAME", in the Biztalk 2009 Configuration Wizard Or the Enterprise SSO Service doesn't start, then you may not have the sso assemblies registered. To do this, do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open a Visual Studio Command Prompt (so regasm.exe is in the path)&lt;/li&gt;&lt;li&gt;Go to the directory C:\Program Files\Common Files\Enterprise Single Sign-On&lt;/li&gt;&lt;li&gt;Register the assembles with the command regasm ssosql.dll.&lt;/li&gt;&lt;li&gt;Reboot.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;DONE!&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Additional Note:&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;If you are doing this in a 64-bit environment, you MUST use the 64-bit version of regasm to register the assemblies. Otherwise it will succeed the regasm command but will not support the Biztalk 2009 configuration wizard and keep&amp;nbsp;failing.&amp;nbsp;The 64 bit version of regasm is here: C:\Windows\Microsoft.NET\Framework64\v2.0.50727&amp;nbsp;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;[As per &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;a href="http://abdulrafaysbiztalk.wordpress.com/2010/03/30/enterprise-sso-service-start-failure-due-to-installation-of-vs2010/"&gt;http://abdulrafaysbiztalk.wordpress.com/2010/03/30/enterprise-sso-service-start-failure-due-to-installation-of-vs2010/&lt;/a&gt; &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;]&lt;/strong&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-17171343510612082?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/17171343510612082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=17171343510612082' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/17171343510612082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/17171343510612082'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/fix-when-configuring-biztalk-2009.html' title='Fix - When Configuring BizTalk 2009 - &quot;Failed to connect to the SQL database SSODB on SQL Server SERVERNAME&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8328603047481289557</id><published>2010-05-25T13:40:00.000+10:00</published><updated>2010-05-25T13:44:15.478+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Aliases'/><title type='text'>SharePoint Installation/Deployment Best Practice - Using SQL Server Aliases to avoid issues if the SQL Database Server is Renamed, a SQL Instance is added or the SQL Port is changed</title><content type='html'>One of the problems SharePoint 2007 is that the database name and server name is held in several tables within the configuration database. When you need to change the name of the database server from Central Administration, several references in the configuration tables need to change. There is the hard way and the easy way of doing this as below: &lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;Changing SharePoint Database Server Name - the &lt;span style="color: red;"&gt;HARD/&lt;/span&gt;&lt;span style="color: red;"&gt;WRONG&lt;/span&gt; way&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Here is the typical process to change the database Server that SharePoint is using: &lt;br /&gt;&lt;div&gt;(see &lt;a href="http://blog.sqlauthority.com/2008/09/09/sql-server-error-fix-sharepoint-stop-working-after-changing-server-computer-name/"&gt;http://blog.sqlauthority.com/2008/09/09/sql-server-error-fix-sharepoint-stop-working-after-changing-server-computer-name/&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Move or attach all the sharepoint databases to the new server.&lt;/li&gt;&lt;li&gt;Change the location of the config database with &lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;strong&gt;stsadm.exe -o setconfigdb -databaseserver ServerName -farmuser MyUserName – farmpassword MyPassword&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;strong&gt;Delete &lt;/strong&gt;&lt;/em&gt;the Central Administration Site in IIS&lt;/li&gt;&lt;li&gt;Re-run the the SharePoint Products and Technologies Configuration Wizard.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;DONE&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Changing SharePoint Database Server Name - the &lt;span style="color: #38761d;"&gt;EASY/RIGHT&lt;/span&gt; way&lt;/strong&gt; &lt;br /&gt;&lt;div&gt;The above process is a bit painful - and I&amp;nbsp;never like&amp;nbsp;deleting a core component of SharePoint like Central Admin.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;To greatly simplify migraton if you should need to change the port or the server name of your SharePoint database server, you should instead use &lt;strong&gt;SQL Server Aliases for your connection&amp;nbsp;from SharePoint to SQL.&lt;/strong&gt;&amp;nbsp;To do this, go to a command prompt on&amp;nbsp;all servers (as they all connect to the database)&amp;nbsp;and enter the following to open the SQL Client Configuration Tool &lt;strong&gt;(note that it doesn't have an i between the n and the f)&lt;/strong&gt;:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;cliconfg &lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;Once this is open, you can add a TCP/IP alias as neccessary, which points to your physical Server name, port or instance. &lt;strong&gt;Use this alias name when entering the database server in SharePoint - and you wont' look back! &lt;/strong&gt;The server name change process is then as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Move or attach all the sharepoint databases to the new server.&lt;/li&gt;&lt;li&gt;Change the Alias&lt;/li&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/S_tGdzHcEHI/AAAAAAAAAdE/mhwXOjA6dtA/s1600/SQLAlias.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" gu="true" height="200" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/S_tGdzHcEHI/AAAAAAAAAdE/mhwXOjA6dtA/s320/SQLAlias.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li&gt;&lt;strong&gt;DONE!&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8328603047481289557?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8328603047481289557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8328603047481289557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8328603047481289557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8328603047481289557'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/sharepoint-best-practice-using-sql.html' title='SharePoint Installation/Deployment Best Practice - Using SQL Server Aliases to avoid issues if the SQL Database Server is Renamed, a SQL Instance is added or the SQL Port is changed'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D1pKsA4Vwno/S_tGdzHcEHI/AAAAAAAAAdE/mhwXOjA6dtA/s72-c/SQLAlias.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-8849307979822484278</id><published>2010-05-21T15:38:00.000+10:00</published><updated>2010-05-21T15:41:10.999+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPC'/><category scheme='http://www.blogger.com/atom/ns#' term='Office 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='VHD'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='ReadyImage'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual Machine'/><title type='text'>Demo Virtual Machine with Office 2010, SharePoint 2010, Visual Studio 2010, Project 2010, Visio 2010 - Hyper-V image now RTM</title><content type='html'>The "&lt;strong&gt;&lt;em&gt;2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM)&lt;/em&gt;&lt;/strong&gt;" image is finally available on Microsoft Downloads here:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=751FA0D1-356C-4002-9C60-D539896C66CE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=751FA0D1-356C-4002-9C60-D539896C66CE&amp;amp;displaylang=en&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;The beta has been around for ages so I'm looking forward to getting this working. You can even convert the Hyper-V image to VMWare with the &lt;strong&gt;VMware vCenter ConverterTM &lt;/strong&gt;&lt;a href="http://www.vmware.com/products/converter/faqs.html"&gt;http://www.vmware.com/products/converter/faqs.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;It includes the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Windows Server 2008 R2 Standard Evaluation Edition x64, running as an Active Directory Domain Controller for the “CONTOSO.COM” domain with DNS and WINS &lt;/li&gt;&lt;li&gt;Microsoft SQL Server 2008 R2 Enterprise Edition with Analysis, Notification, and Reporting Services &lt;/li&gt;&lt;li&gt;Microsoft Office Communication Server 2007 R2 &lt;/li&gt;&lt;li&gt;Microsoft Visual Studio 2010 &lt;/li&gt;&lt;li&gt;Microsoft SharePoint Server 2010 Enterprise Edition &lt;/li&gt;&lt;li&gt;Microsoft Office Web Applications &lt;/li&gt;&lt;li&gt;Microsoft FAST Search for SharePoint 2010 &lt;/li&gt;&lt;li&gt;Microsoft Project Server 2010 &lt;/li&gt;&lt;li&gt;Microsoft Office Professional Plus 2010&lt;/li&gt;&lt;li&gt;Microsoft Visio 2010 &lt;/li&gt;&lt;li&gt;Microsoft Project 2010 &lt;/li&gt;&lt;li&gt;Microsoft Office Communicator 2007 R2&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;&lt;span style="color: blue;"&gt;DDK&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-8849307979822484278?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/8849307979822484278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=8849307979822484278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8849307979822484278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/8849307979822484278'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/demo-virtual-machine-with-office-2010.html' title='Demo Virtual Machine with Office 2010, SharePoint 2010, Visual Studio 2010, Project 2010, Visio 2010 - Hyper-V image now RTM'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-4261965761123625299</id><published>2010-05-21T14:11:00.000+10:00</published><updated>2010-06-04T17:25:08.618+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Deployment Issues'/><title type='text'>Fix for SharePoint 2007 Deployment Issue - Solutions in Permanent state of "Deploying", Application Server Administration Service Timer Job in permanent State of 'Initialized'</title><content type='html'>&lt;strong&gt;If you encounter the following issues when attempting to deploy a SharePoint solution (wsp):&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/S_TqEIZcRFI/AAAAAAAAAc8/8gBgORpQNN0/s1600/FormDeploymentIssue.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="92" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/S_TqEIZcRFI/AAAAAAAAAc8/8gBgORpQNN0/s320/FormDeploymentIssue.jpg" width="320" wt="true" /&gt;&lt;/a&gt; &lt;/div&gt;&lt;li&gt;It is &lt;strong&gt;permanently/constantly&lt;/strong&gt; in a status of &lt;span style="color: #783f04;"&gt;"Deploying"&lt;/span&gt; (as seen in Central Administration&amp;nbsp;- Operations&amp;nbsp;- Solution Management)&lt;/li&gt;&lt;li&gt;You &lt;strong&gt;cannot &lt;/strong&gt;cancel the Deployment (no matter how many times you click on 'Cancel')&lt;/li&gt;&lt;li&gt;The SharePoint Timer job definitions are permanently in a status of &lt;span style="color: #783f04;"&gt;"Initialized"&lt;/span&gt;&amp;nbsp;(as seen in Central Administration&amp;nbsp;- Operations&amp;nbsp;- Timer Job Status).&lt;/li&gt;&lt;li&gt;Your SharePoint Log files are being flooded with the following 5uuf error and growing extremely large (one of ours got to &lt;strong&gt;3GB&lt;/strong&gt;!):&lt;br /&gt;&lt;br /&gt;&lt;em&gt;05/21/2010 11:41:44.87 OWSTIMER.EXE (0x08E0) 0x08E8 Windows SharePoint Services Timer &lt;strong&gt;5uuf&lt;/strong&gt; Monitorable &lt;strong&gt;The previous instance of the timer job 'Config Refresh',&lt;/strong&gt; id '{604B2E6E-5850-4C95-8015-D49A61449456}' for service '{681C12E2-4C2C-4BB5-9C9C-BCCF5B4FF5BE}' &lt;/em&gt;&lt;strong&gt;&lt;em&gt;is still running, so the current instance will be skipped. Consider increasing the interval between jobs.&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt;This is due to an &lt;strong&gt;&lt;span style="color: red;"&gt;invalid configuration cache on one or or all of the servers&lt;/span&gt;&lt;/strong&gt;. What was happening in my situation was that:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The SharePoint Configuration databasse went down.&lt;/li&gt;&lt;li&gt;The XML configuration files on SERVER02 were updated by SharePoint but not on SERVER01&lt;/li&gt;&lt;li&gt;&lt;strong&gt;In fact, there were 500 XML files on one server and 520 on the other &lt;/strong&gt;whereas they should always be in sync.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;However, is is not sufficient to JUST do it on the central admin server. You have to follow this blog entry (&lt;a href="http://blogs.msdn.com/josrod/archive/2007/12/12/clear-the-sharepoint-configuration-cache-for-timer-job-and-psconfig-errors.aspx)"&gt;http://blogs.msdn.com/josrod/archive/2007/12/12/clear-the-sharepoint-configuration-cache-for-timer-job-and-psconfig-errors.aspx)&lt;/a&gt;&amp;nbsp;or (&lt;a href="http://support.microsoft.com/kb/939308"&gt;http://support.microsoft.com/kb/939308&lt;/a&gt;) &amp;nbsp;and perform a similar process (as desribed above on each server.)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;You must do the following:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span id="goog_102236759"&gt;&lt;/span&gt;&lt;span id="goog_102236760"&gt;&lt;/span&gt;Stop the OWSTIMER service on the Index Server and then ALL of the MOSS servers in the farm (for me it was the 2 servers mentioned above e.g. SERVER01 and SERVER02. Just use the following at a command prompt to do this on EVERY WFE and INDEX SERVER&lt;br /&gt;&lt;strong&gt;net stop "Windows SharePoint Services Timer" &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;[DO FOR ALL SERVERS BEFORE RESTARTING THE TIMER SERVICE] &lt;br /&gt;Go to C:\Documents and Settings\All Users\Application Data\Microsoft\SharePoint\Config\&lt;br /&gt;Move (not just copy) all the xml config files &lt;strong&gt;&lt;span style="color: red;"&gt;(don't delete the config file or the folder itself, just all the xml files)&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;to another location (e.g. a "zz" folder") in a temporary directory as a backup. &lt;/li&gt;&lt;li&gt;[DO FOR ALL SERVERS BEFORE RESTARTING THE TIMER SERVICE] &lt;br /&gt;Open the cache.ini with Notepad and reset the number to 1. Save and close the file. &lt;/li&gt;&lt;li&gt;Once all XML files are removed and the cache.ini files reset to 1 &lt;strong&gt;for ALL SERVERS&lt;/strong&gt;, run&lt;br /&gt;&lt;strong&gt;net stop "Windows SharePoint Services Timer"&lt;/strong&gt;on the Index Server first.&lt;/li&gt;&lt;li&gt;Once all the Xml files are generated, run &lt;br /&gt;&lt;strong&gt;net stop "Windows SharePoint Services Timer" &lt;/strong&gt;on Query Servers and Web Front End Servers in turn.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Additional Blog Note - how to remove unwanted solutions that are stuck in a "Deploying"State (without fixing the underlying Config problems as detailed above)&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Reboot Server (in line with my "If in doubt, restart it!" motto). This in effect will restart all the services anyway.&lt;/li&gt;&lt;li&gt;Use the following command to get a list of all solutions that are being deployed.&lt;br /&gt;&lt;strong&gt;stsadm -o enumdeployments&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Use the JobId GUID that comes back from this e.g.&lt;strong&gt; &lt;/strong&gt;&lt;em&gt;Deployment JobId="e99b7304-cfc0-419a-a3f2-18ca5193c838"&lt;/em&gt;&lt;/li&gt;&lt;li&gt;Cancel the "stuck" deployment (in "Deploying" status" with the following command&lt;br /&gt;&lt;strong&gt;stsadm -o canceldeployment -id e99b7304-cfc0-419a-a3f2-18ca5193c838&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Delete the stuck solution once and for all with&lt;br /&gt;&lt;strong&gt;stsdm -o deletesolution -name mysolution.wsp -override &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Redeploy your solution.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-4261965761123625299?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/4261965761123625299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=4261965761123625299' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4261965761123625299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/4261965761123625299'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/fix-for-sharepoint-2007-solution.html' title='Fix for SharePoint 2007 Deployment Issue - Solutions in Permanent state of &quot;Deploying&quot;, Application Server Administration Service Timer Job in permanent State of &apos;Initialized&apos;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/S_TqEIZcRFI/AAAAAAAAAc8/8gBgORpQNN0/s72-c/FormDeploymentIssue.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5997645702468849467</id><published>2010-05-05T18:28:00.000+10:00</published><updated>2010-05-05T23:38:57.389+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C# Tips and Tricks'/><category scheme='http://www.blogger.com/atom/ns#' term='Active Directory'/><title type='text'>How to Recursively Get the Group Membership of a User in Active Directory using .NET/C# and LDAP (without just 2 hits to Active Directory)</title><content type='html'>&lt;strong&gt;Problem&lt;/strong&gt;&lt;br /&gt;What should you do if you need to find all the &lt;strong&gt;indirect&lt;/strong&gt; group memberships that a user has in Active Directory? While it is possible to recursively navigate (ie traverse) through all the group structures that your user is a member of, this can be a very intensive process and can potentially involve &lt;strong&gt;100s of calls to the LDAP server (&lt;span style="color: red;"&gt;A slight performance hit to say the list. In sum,&amp;nbsp;BAD!&lt;/span&gt;)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;In the example below, how do we determine that a user is a member of a top level group without making intensive, recursive calls to Active Directory/LDAP?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/S-Eqe0AsdjI/AAAAAAAAAc0/_5gIW8PhCOg/s1600/ActiveDirectorymembership.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/S-Eqe0AsdjI/AAAAAAAAAc0/_5gIW8PhCOg/s320/ActiveDirectorymembership.jpg" tt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;Solution &lt;/strong&gt;&lt;br /&gt;A better option is to use the power of [Microsoft's Implementation] of&amp;nbsp;LDAP to get the results in only 2 hits to the server. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;We start of with the user's login name (e.g. david.klein)&lt;/li&gt;&lt;li&gt;We query ldap to get their Container Name (CN) e.g. CN=David Klein&lt;/li&gt;&lt;li&gt;We use the special query syntax provided by Microsoft LDAP in the Directory Searcher Filter to recursively get a list of all groups that the user is directly AND indirectly a member of.&lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Details&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;See source code below for 2 helper methods you can use to recursively determine if the designated user is directly or indirectly a member of a particular group. Note that we use the special filter syntax using a specific member flag that will get all indirect memberships automatically for us:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"(member:1.2.840.113556.1.4.1941:=CN=My User Name,OU=Users,OU=NSW,OU=DDKONLINE,DC=DDKONLINE,DC=int)"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;/// &lt;summary&gt;&lt;br /&gt;        /// Recursively Gets ALL nested group memberships of a user and checks the input group is there.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;br /&gt;&lt;param name="username" /&gt;e.g. david.klein or kled123&lt;/param&gt;/// &lt;br /&gt;&lt;param name="groupname" /&gt;Container Name of Group e.g. "SP_DEV_HR"&lt;/param&gt;/// Uses following config entries&lt;br /&gt;        /// &lt;add key="LDAPRoot" value="LDAP://DC=DDKONLINE,DC=int"&gt;&lt;br /&gt;        /// &lt;add key="LDAPGroupMemberFilterRecursive" value="(member:1.2.840.113556.1.4.1941:=CN={0},OU=Users,OU=NSW,OU=DDKONLINE,DC=DDKONLINE,DC=int)"&gt;&lt;br /&gt;        /// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;        public static bool IsUserMemberOfGroup(string username, string groupname)&lt;br /&gt;        {&lt;br /&gt;            ///ConfigHelper.LDAPRoot is "LDAP://DC=DDKONLINE,DC=int"&lt;br /&gt;            DirectoryEntry entry = new DirectoryEntry(ConfigHelper.LDAPRoot);&lt;br /&gt;            // Create a DirectorySearcher object.&lt;br /&gt;            DirectorySearcher mySearcher = new DirectorySearcher(entry);&lt;br /&gt;            //Filter by special recursive LDAP string e.g. &lt;br /&gt;            //"(member:1.2.840.113556.1.4.1941:=CN={0},OU=Users,OU=NSW,OU=DDKONLINE,DC=DDKONLINE,DC=int)"&lt;br /&gt;            mySearcher.Filter = string.Format(ConfigHelper.LDAPGroupMemberFilterRecursive, &lt;br /&gt;                GetUserContainerName(username));&lt;br /&gt;            mySearcher.SearchScope = SearchScope.Subtree; //Search from base down to ALL children. &lt;br /&gt;            SearchResultCollection result = mySearcher.FindAll();&lt;br /&gt;            //StringBuilder sb = new StringBuilder();&lt;br /&gt;&lt;br /&gt;            for (int i = 0; i &amp;lt; result.Count - 1; i++)&lt;br /&gt;            {&lt;br /&gt;                if (result[i].Path.ToUpper().Contains(string.Format("CN={0}", groupname.ToUpper())))&lt;br /&gt;                    return true; //Success - group found&lt;br /&gt;            }&lt;br /&gt;            //No match found&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// Gets the Container Name (CN) of the input user.&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;br /&gt;&lt;param name="userName" /&gt;&lt;/param&gt;/// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;        public static string GetUserContainerName(string userName)&lt;br /&gt;        {&lt;br /&gt;            DirectoryEntry entry = new DirectoryEntry(ConfigHelper.LDAPRoot);&lt;br /&gt;            // Create a DirectorySearcher object.&lt;br /&gt;            DirectorySearcher mySearcher = new DirectorySearcher(entry);&lt;br /&gt;            mySearcher.Filter = string.Format("(&amp;amp;(sAMAccountName={0}))", userName);&lt;br /&gt;            mySearcher.SearchScope = SearchScope.Subtree; //Search from base down to ALL children. &lt;br /&gt;            SearchResultCollection result = mySearcher.FindAll();&lt;br /&gt;            if (result.Count == 0)&lt;br /&gt;                throw new ApplicationException(string.Format("User '{0}' Not Found in Active Directory.", userName));&lt;br /&gt;            return result[0].GetDirectoryEntry().Name.Replace("CN=",string.Empty);  &lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Example Unit Test Methods&lt;/b&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;/// &lt;summary&gt;&lt;br /&gt;        /// This Test checks that the recursive search works correctly against Active directory.&lt;br /&gt;        /// ie. that it picks up indirect membership&lt;br /&gt;        /// Uses following config entries&lt;br /&gt;        /// &lt;add key="LDAPRoot" value="LDAP://DC=DDKONLINE,DC=int"&gt;&lt;br /&gt;        /// &lt;add key="LDAPGroupMemberFilterRecursive" value="(member:1.2.840.113556.1.4.1941:=CN={0},OU=Users,OU=NSW,OU=DDKONLINE,DC=DDKONLINE,DC=int)"&gt;&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [TestMethod()]&lt;br /&gt;        public void IsUserMemberOfGroup_DirectMembership_Positive_Test()&lt;br /&gt;        {&lt;br /&gt;            string username = "sp_dev_pdmtest1"; &lt;br /&gt;            string groupname = "SP_DEV_HR"; // TODO: Initialize to an appropriate value&lt;br /&gt;            bool expected = true; // TODO: Initialize to an appropriate value&lt;br /&gt;            bool actual;&lt;br /&gt;            actual = ADHelper.IsUserMemberOfGroup(username, groupname);&lt;br /&gt;            Assert.AreEqual(expected, actual);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// This Test checks that the recursive search works correctly against Active directory.&lt;br /&gt;        /// ie. that it picks up indirect membership&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [TestMethod()]&lt;br /&gt;        public void IsUserMemberOfGroup_IndirectMembership_Positive_Test()&lt;br /&gt;        {&lt;br /&gt;            string username = "sp_dev_pdmtest1";&lt;br /&gt;            //Naming Convention for Groups is Environment_AppDomain_FunctionalArea_ObjectType (e.g. Form)_Role&lt;br /&gt;            string groupname = "SP_DEV_Onlineforms_Peoplemgmt_Termination_F_Contributors"; // TODO: Initialize to an appropriate value&lt;br /&gt;            bool expected = true; // TODO: Initialize to an appropriate value&lt;br /&gt;            bool actual;&lt;br /&gt;            actual = ADHelper.IsUserMemberOfGroup(username, groupname);&lt;br /&gt;                Assert.AreEqual(expected, actual);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        ///This Test Checks that the container name is resolved. Container name is used by the recursive group search.&lt;br /&gt;        ///&lt;/summary&gt;&lt;br /&gt;        [TestMethod()]&lt;br /&gt;        public void GetUserContainerNameTest()&lt;br /&gt;        {&lt;br /&gt;            string username = "david.klein"; &lt;br /&gt;            string expected = "David Klein"; &lt;br /&gt;            string actual = ADHelper.GetUserContainerName(username);&lt;br /&gt;            Assert.AreEqual(expected, actual);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;DDK&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5997645702468849467?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5997645702468849467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5997645702468849467' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5997645702468849467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5997645702468849467'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/how-to-recursively-get-group-membership.html' title='How to Recursively Get the Group Membership of a User in Active Directory using .NET/C# and LDAP (without just 2 hits to Active Directory)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D1pKsA4Vwno/S-Eqe0AsdjI/AAAAAAAAAc0/_5gIW8PhCOg/s72-c/ActiveDirectorymembership.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2070668529979117849</id><published>2010-05-05T16:33:00.000+10:00</published><updated>2010-05-05T16:33:24.902+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAP BAPIs'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>Error when creating Purchase Order using SAP BAPI_PO_CREATE1 Error - "Material purchase order" is not allowed"</title><content type='html'>If you get the following error when attempting to create a Purchase Order with Project/WBS related line items:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;No instance of object type PurchaseOrder has been created. External reference: ; Purchase order still contains faulty items ; &lt;strong&gt;"Material purchase order" is not allowed&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;The issue may be that the Project (to which you are trying to allocate&amp;nbsp;the&amp;nbsp;cost) is either &lt;strong&gt;unapproved&lt;/strong&gt; or &lt;strong&gt;Inactive. &lt;/strong&gt;Check the status of the WBS or Project that you have chosen and try again. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;DDK&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2070668529979117849?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2070668529979117849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2070668529979117849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2070668529979117849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2070668529979117849'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/05/error-when-creating-purchase-order.html' title='Error when creating Purchase Order using SAP BAPI_PO_CREATE1 Error - &quot;Material purchase order&quot; is not allowed&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-2003334162723629102</id><published>2010-04-29T22:27:00.000+10:00</published><updated>2010-04-29T22:28:37.685+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>www.ddkonline.com featured in SAP official documentation!</title><content type='html'>I was referred to the following article by the SAP Project tech lead in my current project. Funny part is that &lt;em&gt;&lt;strong&gt;this blog is actually one of the references detailed at the end of the article&lt;/strong&gt;&lt;/em&gt;! It was interesting to see the look on his face! &lt;br /&gt;&lt;br /&gt;Ahhhh, it's nice to be appreciated sometimes - even though I'm still&amp;nbsp;feel like a bit of a Microsoft foreigner in the SAP world - &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/40dbb54f-5c28-2d10-ad94-f812a548dc07"&gt;http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/40dbb54f-5c28-2d10-ad94-f812a548dc07&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/S9l60N14pJI/AAAAAAAAAck/HCj2NgZRoEw/s1600/SAPReference.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/S9l60N14pJI/AAAAAAAAAck/HCj2NgZRoEw/s320/SAPReference.jpg" tt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_D1pKsA4Vwno/S9l65fyGt_I/AAAAAAAAAcs/DIX_rFQIvdI/s1600/SAPReference2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_D1pKsA4Vwno/S9l65fyGt_I/AAAAAAAAAcs/DIX_rFQIvdI/s320/SAPReference2.jpg" tt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-2003334162723629102?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/2003334162723629102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=2003334162723629102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2003334162723629102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/2003334162723629102'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/04/wwwddkonlinecom-featured-in-sap.html' title='www.ddkonline.com featured in SAP official documentation!'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/S9l60N14pJI/AAAAAAAAAck/HCj2NgZRoEw/s72-c/SAPReference.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-55170151758810109</id><published>2010-04-26T21:57:00.000+10:00</published><updated>2010-04-27T11:11:37.151+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='C# Tips and Tricks'/><title type='text'>.NET Deep Copy/Deep Clone between 2 different object types in C# – Some of the Different/Alternative Approaches</title><content type='html'>I’ve had to use this “Translation” pattern (and similar code) several times over the last few years – so I’ve decided to commit it to a blog entry for future reference.&lt;br /&gt;&lt;br /&gt;If you have 2 objects (of different types e.g. say 2 different generated WCF client proxies pointing to SAP), with similar generated properties (e.g. both types have the same “Employee” structure with UserId, UserName, Display Name, then you could spend a lot of time trying to write code manually. You could end up writing mapping code like this:&lt;br /&gt;&lt;br /&gt;employeeDto.EmployeeId = currentEmployee.EmployeeId&lt;br /&gt;employeeDto.UserId = currentEmployee.UserId&lt;br /&gt;employeeDto.Department = currentEmployee.Department &lt;br /&gt;etc.&lt;br /&gt;&lt;br /&gt;If you have a simple, flat object that has just value types (e.g. int, strings) with no complex objects (e.g. arrays, generic lists or reference objects) within, then you can simply use a “Shallow Copy” (also known as a “Memberwise Clone”) of the properties between the 2 objects.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/S9WK8sZnZaI/AAAAAAAAAcU/4KE-VD_f_BM/s1600/ShallowCopy2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/S9WK8sZnZaI/AAAAAAAAAcU/4KE-VD_f_BM/s320/ShallowCopy2.jpg" tt="true" /&gt;&lt;/a&gt;&lt;/div&gt;For example:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;/// &lt;summary&gt;&lt;br /&gt;/// Shallow Property Example&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;br /&gt;&lt;param name="source" /&gt;&lt;/param&gt;/// &lt;br /&gt;&lt;param name="destination" /&gt;&lt;/param&gt;public static void CopyPropertyValues(object source, object destination)&lt;br /&gt;{&lt;br /&gt;    var destProperties = destination.GetType().GetProperties();&lt;br /&gt;    foreach (var sourceProperty in source.GetType().GetProperties())&lt;br /&gt;    {&lt;br /&gt;        foreach (var destProperty in destProperties)&lt;br /&gt;        {&lt;br /&gt;            if (destProperty.Name == sourceProperty.Name &amp;amp;&amp;amp;&lt;br /&gt;        destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))&lt;br /&gt;            {&lt;br /&gt;                destProperty.SetValue(destination, sourceProperty.GetValue(&lt;br /&gt;                    source, new object[] { }), new object[] { });&lt;br /&gt;&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_D1pKsA4Vwno/S9WH6rtctcI/AAAAAAAAAcM/lAnZRvOolfc/s1600/DeepCopy.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_D1pKsA4Vwno/S9WH6rtctcI/AAAAAAAAAcM/lAnZRvOolfc/s320/DeepCopy.jpg" tt="true" /&gt;&lt;/a&gt;&lt;/div&gt;If (as in most situations, your objects have child collections) e.g like a Purchase Order would have Purchase order items, then the Shallow copy approach will not work. If you have reference objects, it will actually just copy the references themselves – so the original object and the cloned object effectively have the same references and become the same object. &lt;b&gt;As the references are the same, changes to the "cloned" object will be reflected in the original object - which is typically NOT what you want!&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;To solve this problem, you need to perform a Deep copy of your objects that will in fact traverse your object graph (ie full structure/hierarchy of your objects) to copy all properties and “subproperties” between the 2 different objects (of different types).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Deep Copy – for Same Object Type&lt;/strong&gt;&lt;br /&gt;There are approaches involving serialization and the IClonable interface (see &lt;a href="http://en.csharp-online.net/ICloneable"&gt;http://en.csharp-online.net/ICloneable&lt;/a&gt;) for details – but they only work within the bounds of a single object type (ie they can’t map/translate the properties between 2 different types) – plus it only works with Serializable types:&lt;br /&gt;&lt;br /&gt;(Sample taken from here &lt;a href="http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx"&gt;http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;using System;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Runtime.Serialization;&lt;br /&gt;using System.Runtime.Serialization.Formatters.Binary;     &lt;br /&gt;      &lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Provides a method for performing a deep copy of an object.&lt;br /&gt;/// Binary Serialization is used to perform the copy.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;public static class ObjectCopier&lt;br /&gt;{&lt;br /&gt; /// &lt;summary&gt;&lt;br /&gt; /// Perform a deep Copy of the object.&lt;br /&gt; /// &lt;/summary&gt;&lt;br /&gt; /// &lt;typeparam name="T"&gt;The type of object being copied.&lt;/typeparam&gt;&lt;br /&gt; /// &lt;br /&gt;&lt;param name="source" /&gt;The object instance to copy.&lt;/param&gt;/// &lt;returns&gt;The copied object.&lt;/returns&gt;&lt;br /&gt; public static T Clone&lt;t&gt;(T source)&lt;br /&gt; {&lt;br /&gt;  if (!typeof(T).IsSerializable)&lt;br /&gt;  {&lt;br /&gt;    throw new ArgumentException("The type must be serializable.", "source");&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Don't serialize a null object, simply return the default for that object&lt;br /&gt;  if (Object.ReferenceEquals(source, null))&lt;br /&gt;  {&lt;br /&gt;    return default(T);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  IFormatter formatter = new BinaryFormatter();&lt;br /&gt;  Stream stream = new MemoryStream();&lt;br /&gt;  using (stream)&lt;br /&gt;  {&lt;br /&gt;    formatter.Serialize(stream, source);&lt;br /&gt;    stream.Seek(0, SeekOrigin.Begin);&lt;br /&gt;    return (T)formatter.Deserialize(stream);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Another sample is here (also only works for deep copies between the same object types)&lt;br /&gt;&lt;a href="http://ox.no/posts/extension-methods-for-copying-or-cloning-objects"&gt;http://ox.no/posts/extension-methods-for-copying-or-cloning-objects&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;So for a deep copy approach for (which is what we need for most projects), you can do the following:&lt;br /&gt;• Use &lt;strong&gt;Reflection to navigate through the object graph &lt;/strong&gt;and copy each property one by one (rather than just copying the pointers/references as in the Shallow copy approach) This is a tried and trusted approach, but the performance (as it is using reflection) is not as good as the Expression approach. &lt;br /&gt;• Use&amp;nbsp;&lt;strong&gt;Reflection and Emit of IL Code/Expressions&lt;/strong&gt;&amp;nbsp;(only with .NET 3.5) to perform the copy - this performs better&amp;nbsp;when&amp;nbsp;there are a large number of runs as it runs compiled after the first run&amp;nbsp;(after the initial reflection generates the code) - example can be found here - &lt;a href="http://whizzodev.blogspot.com/2008/06/object-deep-cloning-using-il-in-c_20.html"&gt;http://whizzodev.blogspot.com/2008/06/object-deep-cloning-using-il-in-c_20.html&lt;/a&gt; &lt;br /&gt;• Use a &lt;strong&gt;3rd Party utility library&lt;/strong&gt; (which typically use the approaches above) – such as &lt;strong&gt;Automapper &lt;/strong&gt;(&lt;a href="http://automapper.codeplex.com/"&gt;http://automapper.codeplex.com/&lt;/a&gt;) &lt;br /&gt;&lt;br /&gt;I’ve provided samples/details of the Reflection approach below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Deep Copy Using Reflection, Supporting Different Object Types&lt;/b&gt;&lt;br /&gt;(Sample from &lt;a href="http://stackoverflow.com/questions/569154/how-to-deep-copy-between-objects-of-different-types-in-c-net"&gt;http://stackoverflow.com/questions/569154/how-to-deep-copy-between-objects-of-different-types-in-c-net&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" name="code"&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Reflection;&lt;br /&gt;&lt;br /&gt;namespace DDKOnline.Common&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Utility &lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    public static class DeepCopyUtility&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt; &lt;br /&gt;        /// Copies the data of one object to another. The target object gets properties of the first.  &lt;br /&gt;        /// Any matching properties (by name) are written to the target. &lt;br /&gt;        /// &lt;/summary&gt; &lt;br /&gt;        /// &lt;br /&gt;&lt;param name="source" /&gt;The source object to copy from&lt;/param&gt;/// &lt;br /&gt;&lt;param name="target" /&gt;The target object to copy to&lt;/param&gt;public static void CopyObjectData(object source, object target)&lt;br /&gt;        {&lt;br /&gt;            CopyObjectData(source, target, String.Empty, BindingFlags.Public | BindingFlags.Instance);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt; &lt;br /&gt;        /// Copies the data of one object to another. The target object gets properties of the first.  &lt;br /&gt;        /// Any matching properties (by name) are written to the target. &lt;br /&gt;        /// &lt;/summary&gt; &lt;br /&gt;        /// &lt;br /&gt;&lt;param name="source" /&gt;The source object to copy from&lt;/param&gt;/// &lt;br /&gt;&lt;param name="target" /&gt;The target object to copy to&lt;/param&gt;/// &lt;br /&gt;&lt;param name="excludedProperties" /&gt;A comma delimited list of properties that should not be copied&lt;/param&gt;/// &lt;br /&gt;&lt;param name="memberAccess" /&gt;Reflection binding access&lt;/param&gt;public static void CopyObjectData(object source, object target, string excludedProperties, BindingFlags memberAccess)&lt;br /&gt;        {&lt;br /&gt;            string[] excluded = null;&lt;br /&gt;            if (!string.IsNullOrEmpty(excludedProperties))&lt;br /&gt;            {&lt;br /&gt;                excluded = excludedProperties.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            MemberInfo[] miT = target.GetType().GetMembers(memberAccess);&lt;br /&gt;            foreach (MemberInfo Field in miT)&lt;br /&gt;            {&lt;br /&gt;                string name = Field.Name;&lt;br /&gt;&lt;br /&gt;                // Skip over excluded properties &lt;br /&gt;                if (string.IsNullOrEmpty(excludedProperties) == false&lt;br /&gt;                    &amp;amp;&amp;amp; excluded.Contains(name))&lt;br /&gt;                {&lt;br /&gt;                    continue;&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                if (Field.MemberType == MemberTypes.Field)&lt;br /&gt;                {&lt;br /&gt;                    FieldInfo sourcefield = source.GetType().GetField(name);&lt;br /&gt;                    if (sourcefield == null) { continue; }&lt;br /&gt;&lt;br /&gt;                    object SourceValue = sourcefield.GetValue(source);&lt;br /&gt;                    ((FieldInfo)Field).SetValue(target, SourceValue);&lt;br /&gt;                }&lt;br /&gt;                else if (Field.MemberType == MemberTypes.Property)&lt;br /&gt;                {&lt;br /&gt;                    PropertyInfo piTarget = Field as PropertyInfo;&lt;br /&gt;                    PropertyInfo sourceField = source.GetType().GetProperty(name, memberAccess);&lt;br /&gt;                    if (sourceField == null) { continue; }&lt;br /&gt;&lt;br /&gt;                    if (piTarget.CanWrite &amp;amp;&amp;amp; sourceField.CanRead)&lt;br /&gt;                    {&lt;br /&gt;                        object targetValue = piTarget.GetValue(target, null);&lt;br /&gt;                        object sourceValue = sourceField.GetValue(source, null);&lt;br /&gt;&lt;br /&gt;                        if (sourceValue == null) { continue; }&lt;br /&gt;&lt;br /&gt;                        if (sourceField.PropertyType.IsArray&lt;br /&gt;                            &amp;amp;&amp;amp; piTarget.PropertyType.IsArray&lt;br /&gt;                            &amp;amp;&amp;amp; sourceValue != null)&lt;br /&gt;                        {&lt;br /&gt;                            CopyArray(source, target, memberAccess, piTarget, sourceField, sourceValue);&lt;br /&gt;                        }&lt;br /&gt;                        else&lt;br /&gt;                        {&lt;br /&gt;                            CopySingleData(source, target, memberAccess, piTarget, sourceField, targetValue, sourceValue);&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void CopySingleData(object source, object target, BindingFlags memberAccess, PropertyInfo piTarget, PropertyInfo sourceField, object targetValue, object sourceValue)&lt;br /&gt;        {&lt;br /&gt;            //instantiate target if needed &lt;br /&gt;            if (targetValue == null&lt;br /&gt;                &amp;amp;&amp;amp; piTarget.PropertyType.IsValueType == false&lt;br /&gt;                &amp;amp;&amp;amp; piTarget.PropertyType != typeof(string))&lt;br /&gt;            {&lt;br /&gt;                if (piTarget.PropertyType.IsArray)&lt;br /&gt;                {&lt;br /&gt;                    targetValue = Activator.CreateInstance(piTarget.PropertyType.GetElementType());&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    targetValue = Activator.CreateInstance(piTarget.PropertyType);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (piTarget.PropertyType.IsValueType == false&lt;br /&gt;                &amp;amp;&amp;amp; piTarget.PropertyType != typeof(string))&lt;br /&gt;            {&lt;br /&gt;                CopyObjectData(sourceValue, targetValue, "", memberAccess);&lt;br /&gt;                piTarget.SetValue(target, targetValue, null);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                if (piTarget.PropertyType.FullName == sourceField.PropertyType.FullName)&lt;br /&gt;                {&lt;br /&gt;                    object tempSourceValue = sourceField.GetValue(source, null);&lt;br /&gt;                    piTarget.SetValue(target, tempSourceValue, null);&lt;br /&gt;                }&lt;br /&gt;                else&lt;br /&gt;                {&lt;br /&gt;                    CopyObjectData(piTarget, target, "", memberAccess);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static void CopyArray(object source, object target, BindingFlags memberAccess, PropertyInfo piTarget, PropertyInfo sourceField, object sourceValue)&lt;br /&gt;        {&lt;br /&gt;            int sourceLength = (int)sourceValue.GetType().InvokeMember("Length", BindingFlags.GetProperty, null, sourceValue, null);&lt;br /&gt;            Array targetArray = Array.CreateInstance(piTarget.PropertyType.GetElementType(), sourceLength);&lt;br /&gt;            Array array = (Array)sourceField.GetValue(source, null);&lt;br /&gt;&lt;br /&gt;            for (int i = 0; i &amp;lt; array.Length; i++)&lt;br /&gt;            {&lt;br /&gt;                object o = array.GetValue(i);&lt;br /&gt;                object tempTarget = Activator.CreateInstance(piTarget.PropertyType.GetElementType());&lt;br /&gt;                CopyObjectData(o, tempTarget, "", memberAccess);&lt;br /&gt;                targetArray.SetValue(tempTarget, i);&lt;br /&gt;            }&lt;br /&gt;            piTarget.SetValue(target, targetArray, null);&lt;br /&gt;        } &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-55170151758810109?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/55170151758810109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=55170151758810109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/55170151758810109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/55170151758810109'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/04/net-deep-copy-between-2-different.html' title='.NET Deep Copy/Deep Clone between 2 different object types in C# – Some of the Different/Alternative Approaches'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D1pKsA4Vwno/S9WK8sZnZaI/AAAAAAAAAcU/4KE-VD_f_BM/s72-c/ShallowCopy2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1991121878783817497</id><published>2010-04-20T19:02:00.000+10:00</published><updated>2010-04-20T19:05:46.408+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ 2 SQL'/><title type='text'>Finding Duplicates in a list using LINQ Lambda Expressions</title><content type='html'>Here is a one-liner that allows you to get a list of the duplicates in a list. I originally tried to approach the problem using the LINQ Group By syntax (like what I did &lt;a href="http://ddkonline.blogspot.com/2008/04/linq-group-by-syntax-for-grouping-on.html"&gt;here&lt;/a&gt; in 2008), but I found this to be a much simpler solution. &lt;br /&gt;&lt;br /&gt;This works by utilizing the &lt;b&gt;.Except&lt;/b&gt; extension method that compares with a blank list. Because &lt;strong&gt;ALL items don't match what is in the blank list&lt;/strong&gt;, then all elements are passed to the subsequent &lt;b&gt;.Any&lt;/b&gt; statement which picks up any item in which all fields specified in the lambda expression match.&lt;br /&gt;&lt;br /&gt;Here's the code for listing duplicates in LINQ, comparing against multiple columns:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;var duplicates =&lt;br /&gt;timesheetDto.TimesheetItems.Where(timesheetItem =&gt;&lt;br /&gt;timesheetDto.TimesheetItems&lt;br /&gt;.Except(new List&lt;timesheetitem&gt; { timesheetItem })&lt;br /&gt;.Any(matchingTimesheetItem =&gt; &lt;br /&gt;timesheetItem.ActivityType  == matchingTimesheetItem.ActivityType &amp;&amp;&lt;br /&gt;timesheetItem.ReceivingWBSElement == matchingTimesheetItem.ReceivingWBSElement &amp;&amp;&lt;br /&gt;timesheetItem.ReceivingCostCentre == matchingTimesheetItem.ReceivingCostCentre &amp;&amp;&lt;br /&gt;timesheetItem.SendingCostCentre == matchingTimesheetItem.SendingCostCentre&lt;br /&gt;)&lt;br /&gt;).ToList(); &lt;br /&gt;&lt;br /&gt;return duplicates.Count &gt; 0;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1991121878783817497?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1991121878783817497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1991121878783817497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1991121878783817497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1991121878783817497'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/04/finding-duplicates-in-list-using-linq.html' title='Finding Duplicates in a list using LINQ Lambda Expressions'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6597052616639746648</id><published>2010-04-13T07:49:00.000+10:00</published><updated>2010-04-14T08:14:30.779+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zach William Klein'/><title type='text'>Zach Klein's First Words (drum roll...)</title><content type='html'>So that my son Zach doesn't feel left out, I've compiled a list of Zachy's first words (at 18 months old)&amp;nbsp;with a brief explanation for each for future reference (and mockery&amp;nbsp;at his 21st!):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Baba/Daddy&lt;/strong&gt; (Mandarin for daddy. Again I was successful in conquering the first word department, same as with my daugter Heidi!)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Maaa/Mama&lt;/strong&gt; (Mandarin for mummy)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;She She&lt;/strong&gt; (Mandarin for Thankyou - he is a very polite young man (sometimes), and says this withought fail if you give him his milk)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;No, No, No&lt;/strong&gt; (while vigorously shaking his head)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Fower&lt;/strong&gt; (Zach's version of "flower")&lt;/li&gt;&lt;li&gt;&lt;strong&gt;My, My, My, My&lt;/strong&gt;&amp;nbsp;(Yes - Just like the mindless flock of seagulls in the movie "Finding Nemo". Typically said 4 times)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Mesh&lt;/strong&gt; (Mess. He says this a lot)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Thee Thaw &lt;/strong&gt;(see-saw - whenever he sits on your stomach, he moves backwards and forwards to indicate he wants you to move like a see-saw)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Allo&lt;/strong&gt; - (when he manages to get hold of a phone and randomly change our Phone address books, or if he is asking for a phone, he'll point at the phone and say this). Typically followed by &lt;strong&gt;"Bye"&lt;/strong&gt; as soon as he closes the phone.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Oh Baobei (&lt;/strong&gt;Mandarin for "precious" - Lisa and I says this too him a lot, but I believe he's talking about himself when he is crying&amp;nbsp;and keeps saying "Oh Baobei!, Oh Baobei!". I suppose he has a good ego to think that well of himself!&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Nai Nai ("&lt;/strong&gt;Good night", typically followed by shaking of head, crying and &lt;strong&gt;No Nai Nai!)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dish (&lt;/strong&gt;Indicating he wants some) &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Uh Oh &lt;/strong&gt;(He says this too many times for my liking)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dadyoo &lt;/strong&gt;(Thankyou)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Taa &lt;/strong&gt;(Thanks)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Deal&lt;/strong&gt; (Technically he doesn't say it but he understands it and does the crossed hands motion same as the TV show "Deal or No Deal" when you say this word!)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Upf &lt;/strong&gt;(Up - when he wants you to cuddle him)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Off&amp;nbsp;&lt;/strong&gt;(Off - when he wants to get out of bed)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Out &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Tree &lt;/strong&gt;(he passes trees every morning on the way to kindergarten)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Gaga&lt;/strong&gt; (same as Heidi, for small birds only)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Aydee&lt;/strong&gt; (for his sister Heidi)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;jiějiě&lt;/strong&gt; (Mandarin for older sister, when talking about Heidi)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Din Din&lt;/strong&gt; (Mandarin for light - for when he wants it turned on or off. He also loves to play with lights and power switches and uses this word when he's up to mischief)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Meelk, Meelk,&amp;nbsp;Oh Oh Oh&lt;/strong&gt;&amp;nbsp;(Milk)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dee Dee&lt;/strong&gt; (When he wants his milk from the Microwave)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Bubool &lt;/strong&gt;(Bubble)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Nana&lt;/strong&gt; (Banana)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Apple&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Book&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Knock Knock&lt;/strong&gt; (Accompanied by a knocking action on his own chest or the nearest table).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Ganbei&lt;/strong&gt; (Cheers - accompanied with )&lt;/li&gt;&lt;li&gt;&lt;strong&gt;All Gong&lt;/strong&gt; (when finished his dinner)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;More &lt;/strong&gt;(and &lt;strong&gt;No More&lt;/strong&gt;)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Go&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Shoo&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Baff &lt;/strong&gt;(Bath)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Choo Choo&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Wee Wee &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Poh (&lt;/strong&gt;Poo&lt;strong&gt;)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Weeeee (&lt;/strong&gt;When going down slides or sliding down our legs)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Yum &lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Yuk&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Erduo&lt;/strong&gt; (Ear - when he want Lisa to clean his ears out - he finds this very soothing)&lt;/li&gt;&lt;/ol&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6597052616639746648?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6597052616639746648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6597052616639746648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6597052616639746648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6597052616639746648'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/04/zach-kleins-first-words-drum-roll.html' title='Zach Klein&apos;s First Words (drum roll...)'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-9205284797351790099</id><published>2010-04-10T19:02:00.000+10:00</published><updated>2010-04-10T21:55:03.489+10:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MSN Messenger'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live Messenger'/><title type='text'>Fix for Error with Windows Live Messenger - "Signing in to Windows Live Messenger failed because the service is temporarily unavailable. Please try again later. Error code: 8e5e0408"</title><content type='html'>If you get the following error and you've ruled out all connectivity issues (all tests pass in the built-in connectivity checker and all ports are open as neccessary on your firewall):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;"Signing in to Windows Live Messenger failed because the service is temporarily unavailable. Please try again later.&lt;br /&gt;Error code: 8e5e0408"&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_D1pKsA4Vwno/S8A-YHTBTjI/AAAAAAAAAb0/h10LCXJSDK0/s1600/LiveMessengerError.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_D1pKsA4Vwno/S8A-YHTBTjI/AAAAAAAAAb0/h10LCXJSDK0/s320/LiveMessengerError.png" wt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;You may be suffering from a &lt;strong&gt;Corrupt Windows Live Contacts file&lt;/strong&gt;. To fix it, just delete this folder and restart Messenger again as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Based on the operating system version, browse to the following location&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: black;"&gt;· Windows XP: &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Go to Start, click on My Computer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Browse to the location,C:\Documents and Settings\&lt;windows logon="" name=""&gt;\Local Settings\Application Data\Microsoft &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: black;"&gt;· Windows Vista and Windows 7: &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Go to Start, click on Computer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Browse to the location, C:\Users\&lt;windows logon="" name=""&gt;\AppData\Local\Microsoft &lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Note: Windows Logon name is the logon name that you use to sign in to Windows Operating system.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;b. Locate and delete the Windows Live Contacts folder.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;c. Re-launch Windows Live Messenger and try to sign in again, and verify if the issue remains.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you're still having problems:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you get error 800702e4, Disable UAC (in Windows 7/Vista). If&amp;nbsp;you can now log in&amp;nbsp;successfully&amp;nbsp;- you have permissions problems accessing the C:\Users\&lt;em&gt;UserName&lt;/em&gt; directory.&amp;nbsp;You should add the &lt;strong&gt;current user to have full control to their own user's directory to ensure they can write to the neccessary log and data files&lt;/strong&gt; without requiring any kind of elevated UAC permissions.&lt;/li&gt;&lt;li&gt;Try a completely clean install of Windows Live Messenger as per &lt;a href="http://windowslivehelp.com/solution.aspx?solutionid=935bb770-b07c-4393-9de9-6bc1192dc8cc"&gt;http://windowslivehelp.com/solution.aspx?solutionid=935bb770-b07c-4393-9de9-6bc1192dc8cc&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;DDK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-9205284797351790099?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/9205284797351790099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=9205284797351790099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9205284797351790099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/9205284797351790099'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/04/fix-for-error-with-windows-live.html' title='Fix for Error with Windows Live Messenger - &quot;Signing in to Windows Live Messenger failed because the service is temporarily unavailable. Please try again later. Error code: 8e5e0408&quot;'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D1pKsA4Vwno/S8A-YHTBTjI/AAAAAAAAAb0/h10LCXJSDK0/s72-c/LiveMessengerError.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-5870348398313484255</id><published>2010-03-19T19:59:00.000+11:00</published><updated>2010-03-19T20:09:07.331+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Deployment'/><title type='text'>SharePoint 2007 Feature Deployment - Creating Lists with Data Programatically versus Declaratively</title><content type='html'>To simplify SharePoint deployment, it is a good practice to deploy supporting components such as lists as part of the same feature (so they don't need to be created manually).&lt;br /&gt;&lt;br /&gt;While it IS entirely possible to deploy list instances WITH data with a declarative ListInstance block as below (see xml snippet below, and see &lt;a href="http://msdn.microsoft.com/en-us/library/ms478860.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms478860.aspx&lt;/a&gt;), the drawback is that you have little control over how the data is actually deployed to your lists. For example, if I deploy the package twice, it will simply double-up on the data - which is not an ideal scenario.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="xml"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;br /&gt;&amp;lt;Elements xmlns="http://schemas.microsoft.com/sharepoint/"&amp;gt;&lt;br /&gt;  &amp;lt;!-- NOTE: FeatureId is the feature where the list template is defined, &lt;br /&gt;  NOT the current featureId. Template Type should match the list template type&lt;br /&gt;  --&amp;gt;&lt;br /&gt;  &amp;lt;!--Create the list instance--&amp;gt;&lt;br /&gt;  &amp;lt;ListInstance FeatureId="a0bf89ed-c424-4391-ba75-0e43d3391bdb" &lt;br /&gt;                Title="SAPState" Description="SAP State List (Created by a Feature)" &lt;br /&gt;                Id="1099" TemplateType="100" Url="Lists/SAPState"&amp;gt;&lt;br /&gt;    &amp;lt;!--Add the data --&amp;gt;&lt;br /&gt;    &amp;lt;Data&amp;gt;&lt;br /&gt;      &amp;lt;Rows&amp;gt;&lt;br /&gt;        &amp;lt;Row&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="ItemId"&amp;gt;NSW&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="Title"&amp;gt;New South Wales&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="DisplayOrder" /&amp;gt;&lt;br /&gt;        &amp;lt;/Row&amp;gt;&lt;br /&gt;        &amp;lt;Row&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="ItemId"&amp;gt;ACT&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="Title"&amp;gt;ACT&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="DisplayOrder" /&amp;gt;&lt;br /&gt;        &amp;lt;/Row&amp;gt;&lt;br /&gt;        &amp;lt;Row&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="ItemId"&amp;gt;VIC&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="Title"&amp;gt;Victoria&amp;lt;/Field&amp;gt;&lt;br /&gt;          &amp;lt;Field Name="DisplayOrder" /&amp;gt;&lt;br /&gt;        &amp;lt;/Row&amp;gt;&lt;br /&gt;      &amp;lt;/Rows&amp;gt;&lt;br /&gt;    &amp;lt;/Data&amp;gt;&lt;br /&gt;  &amp;lt;/ListInstance&amp;gt;&lt;br /&gt;&amp;lt;/Elements&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To work around this issue, I recommend that you make use of a SPFeatureReceiver and use code to programatically control the creation of your lists and list data. See the helper method below for an example. Note that you retrieve the list template you want to use via the &lt;b&gt;SPWeb.ListTemplates[]&lt;/b&gt; collection&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;/// &lt;summary&gt;&lt;br /&gt;        /// Creates custom list using the specified template and adds lookup data as neccessary&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        /// &lt;param name="web"&gt;&lt;/param&gt;/// &lt;param name="listName"&gt;&lt;/param&gt;/// &lt;param name="listDecription"&gt;&lt;/param&gt;/// &lt;param name="listTemplate"&gt;&lt;/param&gt;/// &lt;param name="listData"&gt;&lt;/param&gt;/// &lt;returns&gt;&lt;/returns&gt;&lt;br /&gt;        public static Guid ProvisionCustomList(SPWeb web, string listName, string listDecription, SPListTemplate listTemplate, List&lt;listdatarow&gt; listData)&lt;br /&gt;        {&lt;br /&gt;            SPList tryList = null;&lt;br /&gt;            Guid listID = Guid.Empty;&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                tryList = web.GetList(listName);&lt;br /&gt;            }&lt;br /&gt;            catch&lt;br /&gt;            { }&lt;br /&gt;&lt;br /&gt;            if (tryList == null)&lt;br /&gt;            {&lt;br /&gt;                try&lt;br /&gt;                {&lt;br /&gt;                    listID = web.Lists.Add(listName, listDecription, listTemplate);&lt;br /&gt;                }&lt;br /&gt;                catch (Exception ex)&lt;br /&gt;                {&lt;br /&gt;                    throw new Exception("Cannot instantiate the list '" + listName + "'. " + ex.Message, ex);&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                if (listID != Guid.Empty &amp;&amp; listData != null &amp;&amp; listData.Count &gt; 0)&lt;br /&gt;                {&lt;br /&gt;                    web.AllowUnsafeUpdates = true;&lt;br /&gt;                    var list = web.Lists[listID];&lt;br /&gt;                    try&lt;br /&gt;                    {&lt;br /&gt;                        foreach (var dataRow in listData)&lt;br /&gt;                        {&lt;br /&gt;                            var listItem = list.Items.Add();&lt;br /&gt;                            listItem["ItemId"] = dataRow.ItemId ?? "";&lt;br /&gt;                            listItem["Title"] = dataRow.Title ?? "";&lt;br /&gt;                            listItem["DisplayOrder"] = dataRow.DisplayOrder ?? "";&lt;br /&gt;                            listItem.Update();&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    catch (Exception ex)&lt;br /&gt;                    {&lt;br /&gt;                        throw new Exception("Cannot add the data to the list '" + listName + "'. " + ex.Message, ex);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return listID; &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-5870348398313484255?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/5870348398313484255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=5870348398313484255' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5870348398313484255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/5870348398313484255'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/03/sharepoint-2007-feature-deployment.html' title='SharePoint 2007 Feature Deployment - Creating Lists with Data Programatically versus Declaratively'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-6711690973207354788</id><published>2010-03-18T16:41:00.000+11:00</published><updated>2010-03-19T19:32:05.829+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint 2007'/><category scheme='http://www.blogger.com/atom/ns#' term='SAP SharePoint Integration'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Deployment'/><title type='text'>List of Permissions Required for Deployment and Activation of Solutions/Features on a SharePoint Site</title><content type='html'>Today I had some issues today with deployment of SharePoint Solutions/Features to one of the development servers. I knew you need both database and site permissions - but wasn't clear on exactly what databases I needed permissions to. Here are the permissions that you need to deploy a solution/feature to SharePoint:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Farm Administrator (add this through Central Admin)&lt;/li&gt;&lt;li&gt;Site Collection Administrator (Done through the Individual Site Collection itself)&lt;/li&gt;&lt;li&gt;db_owner and db_securityadmin permissions on the &lt;strong&gt;Central Admin Content database (note that this is normally generated with a Guid in the name e.g. SharePoint_AdminContent_XXXX-XXX-XXX-XXXX&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;db_owner permissions on the Content database for your site e.g. DEV_MachineName_WSS_Content_Portal_5000_0&lt;/li&gt;&lt;li&gt;Local admin rights on the server itself.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-6711690973207354788?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/6711690973207354788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=6711690973207354788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6711690973207354788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/6711690973207354788'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/03/list-of-permissions-required-for.html' title='List of Permissions Required for Deployment and Activation of Solutions/Features on a SharePoint Site'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-12504918633912659</id><published>2010-03-14T08:34:00.000+11:00</published><updated>2010-03-14T08:34:14.318+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><title type='text'>Fix for issue with Vista which prevents machines from going to sleep - related to Multimedia Sharing</title><content type='html'>It must have been a patch or hotfix that Windows Update installed recently (or the fact that it detected my Windows 7 Ultimate install's multimedia sharing capabilities), but my wife's laptop with Vista Home would never go to "Sleep" (aka suspend mode) when the lid was closed or the "Sleep" option was chosen from the Shutdown prompt.&amp;nbsp; If you choose the sleep option, it would just wait a couple of seconds, jump to a login prompt but never actually get to the Shutdown/Sleep sequence. The fix was as per:&lt;br /&gt;&lt;a href="http://www.techsupportforum.com/microsoft-support/windows-vista-windows-7-support/143828-vista-will-not-sleep.html"&gt;http://www.techsupportforum.com/microsoft-support/windows-vista-windows-7-support/143828-vista-will-not-sleep.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;It was something to do with the "Multimedia Sharing Options" which stop the machine from going to sleep:&lt;br /&gt;&lt;br /&gt;To fix the issue, do this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Control Panel -&amp;gt; Power Options -&amp;gt; If "High Performance" is selected, choose something else, like "Balanced" -&amp;gt; Change plan settings (for the chosen power plan) -&amp;gt; Change advanced power settings -&amp;gt; Scroll down to Multimedia settings -&amp;gt; When Sharing Media -&amp;gt; Set all options to "Allow the computer to sleep".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/S5wDk6MDKoI/AAAAAAAAAbs/dhuIad3dqzQ/s1600-h/VistaAllowToSleep.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/S5wDk6MDKoI/AAAAAAAAAbs/dhuIad3dqzQ/s320/VistaAllowToSleep.jpg" vt="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The machine now sleeps when the lid is closed and boots up when opened (as before). A suggestion to MS would be to show a message in the Windows messagebar explaining why the machine was prevented from going to sleep rather than just flat out refusing to respond to "Sleep" requests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-12504918633912659?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/12504918633912659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=12504918633912659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/12504918633912659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/12504918633912659'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/03/fix-for-issue-with-vista-which-prevents.html' title='Fix for issue with Vista which prevents machines from going to sleep - related to Multimedia Sharing'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D1pKsA4Vwno/S5wDk6MDKoI/AAAAAAAAAbs/dhuIad3dqzQ/s72-c/VistaAllowToSleep.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-1966843456403613356</id><published>2010-03-12T10:45:00.000+11:00</published><updated>2010-03-12T10:46:16.209+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint Forms Services'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath Browser Based Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath 2007'/><title type='text'>InfoPath 2007 - Fix for "Operation could not be completed" errors when opening InfoPath form in design view</title><content type='html'>If your InfoPath 2007 form suddenly stops working in design mode and you start to get the following error when opening the form in design mode:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;"Operation could not be completed."&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are a few things you can do to try and fix it:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Remove all the the local cache files from your machine (typically found in C:\Users\USERNAME\AppData\Local\Microsoft\InfoPath) - delete the "Designer2", "Cache2" and temp folders&lt;/li&gt;&lt;li&gt;If that doesn't work, try running the form (e.g. in Visual Studio 2008, just right click on the form project and Click "Debug -&amp;gt; Start New Instance". When it opens, it will correct the project structure or re-add neccessary .NET assemblies to the project. Go to design mode again - and it will all start working (though all the tabs in the Designer window will now open). I suspect this happens if the xsf file is not correctly written to or some of your supporting files are readonly on save.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-1966843456403613356?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/1966843456403613356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=1966843456403613356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1966843456403613356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/1966843456403613356'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/03/infopath-2007-fix-for-operation-could.html' title='InfoPath 2007 - Fix for &quot;Operation could not be completed&quot; errors when opening InfoPath form in design view'/><author><name>David Klein</name><uri>http://www.blogger.com/profile/13657389334766989234</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://4.bp.blogspot.com/_D1pKsA4Vwno/SKvJK8vXy6I/AAAAAAAAAII/rPnQ2uStBG8/S220/BioPic_V4.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7130587409577087282.post-516116919930359606</id><published>2010-02-18T14:09:00.000+11:00</published><updated>2010-02-18T14:09:25.324+11:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft SAP Integration'/><title type='text'>"javax.naming.Name is an interface, and JAXB can't handle interfaces" - Deployment Issues when using Eclipse to Deploy a JavaBean Web Service in to SAP Java AS</title><content type='html'>Hit an issue today when deploying an Enterprise JavaBen (EJB) web service today via Eclipse. I was exposing the SAP UWL through the UWL API - but it wouldn't deploy. I kept getting the following error in the deployment trace:&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;[com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions &lt;br /&gt;&lt;em&gt;javax.naming.Name is an interface, and JAXB can't handle interfaces.&lt;/em&gt;]&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_D1pKsA4Vwno/S3yuMc0p44I/AAAAAAAAAbk/EFtees1gPAI/s1600-h/UwlEclipseError.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" ct="true" height="243" src="http://1.bp.blogspot.com/_D1pKsA4Vwno/S3yuMc0p44I/AAAAAAAAAbk/EFtees1gPAI/s400/UwlEclipseError.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;Looking at all my &lt;strong&gt;@WebMethod annotations&lt;/strong&gt;, there didn't seem to be any obvious problem:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;@WebMethod(operationName="Test", exclude=false)&lt;br /&gt;public int Test() throws UWLException, NamingException&lt;br /&gt;{&lt;br /&gt;IUser user = com.sap.security.api.UMFactory.getAuthenticator().getLoggedInUser();&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;I examined the Eclipse debug trace to about line 100, I found an issue - that there was a problem with serialization:&lt;br /&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;Unable to generate serialization framework for web service UWLFacadeService&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Turns out the deployment exception was really trying to tell me that "NamingException" is not serializable - and so cannot be surfaced through a Web Service. I changed my method to handle the NamingException errors internally (via try..catching them), and removed the throws statement on the Method. Without the requirement to serialize the exception, the deployment errors for my test EJB web service went away!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;......&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7130587409577087282-516116919930359606?l=ddkonline.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ddkonline.blogspot.com/feeds/516116919930359606/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7130587409577087282&amp;postID=516116919930359606' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/516116919930359606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7130587409577087282/posts/default/516116919930359606'/><link rel='alternate' type='text/html' href='http://ddkonline.blogspot.com/2010/02/javaxnamingname-is-interface-and-jaxb.html' title='&quot;javax.naming.Name is an interface, and JAXB ca
