Tuesday, May 10, 2011

Multiple NT authentication prompts in MOSS 2007 Server

In our team, people usually build their own development machines from the scratch and recently faced this multiple authentication prompt issue while accessing central administration right after the PSConfig wizard execution.

We tried all the browser tricks
  • switching off the IE Enhanced security configuration
  • Adding the site to IE's Local intranet zone
  • Checking the IE cookie storage setting and Authentication settings
Nothing worked, still there were multiple  authentication prompts and Fiddler showing many HTTP 401 requests. Even without providing the username and password, by pressing the ESC key continuously we were able to reach the Central administration home page. But none of the Ok/Cancel button worked as expected and leaving the Central admin console useless.

Finally Manimaran,  found a  Microsoft's KB article 95271, which clearly says you guys might be trying to install IIS 6.0 on top of a Windows Server 2003 SP2.

The machine was patched with Windows Server 2003 SP2 and we installed IIS 6.0 using an RTM disc which apparently reverted some libraries to its older version especially asp.dll. Replacing only this library didn't workout and I don't want to re-install OS Service Pack 2 again.

Workaround without re-installing Win 2003 SP2:
  • Keep Win 2003 SP1 and SP2 installation media handy in a drive.
  • Extract I386 content of these service packs using an archive tool, mine is 7zip
  • Uninstall SharePoint server and delete the content databases in database.
  • Remove the machines application server role and Uninstall IIS 6.0
  • Add Application server role , Install IIS 6.0 
  • Whenever the installer prompts for files to install point to the folder where you extracted SP2
  • In case if you don't find the files in SP2 folder, drill down in SP1 folder else in RTM disc.
Thats it now start installing SharePoint now.

Wednesday, April 20, 2011

Continuous Integration and remote deployment for SharePoint

This is a short guide of setting up a Continuous integration server and integrating with different plugins to analyse the code quality. At the end of the pipeline, we'll deploy to a remote staging server. The core idea is to build the solution on top of open source stack rather than  proprietary solutions like TFS.

Setting up Continuous Integration server:

  • Although there are tons of CI tools available in the market,as CruiseControl.Net looked for great for integrating various tools we picked up CruiseControl for our implementation.
  • Install CruiseControl.Net on a designated build server
  • CC.NET supports various source control blocks CVS,Subversion,VSS,SourceGear, StarTeam etc.
  • Download a command line client for the source control repository, for Subversion download this CollabNet Subversion command line client
  • Upon successful installation, browse to the folder C:\Program Files\CruiseControl.NET and open ccnet.config file in a text editor.
  • Add the project level detail

<project name=" testProject">
<workingDirectory>C:\develop\project1WorkingDir </workingDirectory>
</project>
  • Add source control block, which contains the SVN repository end point and credentials required to access these resources.
<sourcecontrol type="svn">
<trunkUrl>svn://Foo/trunk</trunkUrl>
<Working Directory>C:\develop\project1WorkingDir </workingDirectory>
<username>ccnet </username>
<password> ccnet </password>
</sourcecontrol>
  • Now we've added a Subversion URL with required credentials to access 
  • Let's add a Trigger block to tell the integration server at what frequency it should get latest and do a build. set the frequency as 360 seconds.
<triggers>
<intervalTrigger name="Subversion" seconds="360" buildCondition="ForceBuild" />
</triggers>
  • Add a Task block for building the solution, CC.net supports various build automation engines such as MSBuild, VSDevenv,NAnt  etc. We'll configure for MSBuild.
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<WorkingDirectory>C:\develop\project1WorkingDir</workingDirectory>
<projectFile>Sampleprojects.sln</projectFile >
<executable>
</tasks>
  • Alternatively if you want to use Visual studio to build the solution, following fragment will be helpful
<devenv>      
<solutionfile>C:development\Foo.sln</solutionfile>
        <configuration>Debug</configuration>
        <buildtype>Clean</buildtype>
        <executable>C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe</executable>        <buildTimeoutSeconds>360</buildTimeoutSeconds>
      </devenv>
  •  Add an Executable Task in this section after the build task for integrating other third party analysis tools like Microsoft FxCop for static code analysis, SPDisposeCheck tool for memory leak test, Microsoft StyleCop etc.
</exec>
<exec executable="C:\Program Files\Microsoft\SharePoint Dispose Check\SPDisposeCheck.exe">      <buildArgs>C:Foo\bin</buildArgs>
</exec>
  • Above Exec snippet requires all binaries to be stored in a single folder to run SPDisposeCheck, this can be done by adding a post build command in CS Project files.
  • Integrate Unit test case execution tools and code coverage tools like MSTest and NUnit test.
Package and move to staging server
  • Add a Exec task tag for WSP Builder
<exec executable="C:\Program Files\WSPTools\WSPBuilderExtensions\WSPBuilder.exe"><baseDirectory>C:\Foo\solutions</baseDirectory>      <buildTimeoutSeconds>360</buildTimeoutSeconds></exec>
  • Add a task which executes a xcopy command to move all these wsp packages to a staging server
<exec executable="C:\WINDOWS\system32\xcopy.exe">
<buildArgs>C:\Foo\Solutions\Output.WSP\*.wsp \\md-stagingSvr\share</buildArgs></exec>
Remote deployment with Sysinternal's PSExec

  • Add  another exec task to invoke PSExec tool to do the remote deployment
  • Alternatively if you have Windows Powershell in these machines you can make use of power shell to do the remote deployment.
<exec executable="C:\SysinternalsSuite\psexec.exe">
<buildArgs>\\md-stagingSvr-u "md-stagingSvr\aravind" -p 123$ "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN\stsadm.exe" -o addsolution -filename c:\share\output.wsp</buildArgs></exec>


Saturday, March 26, 2011

Notes from Tech Ed 2011 India - 2

TFS: Continuous Global Delivery, presented by Vinay Badami and following notes were taken from the session.

  • Supports client installations- Windows Vista, Windows 7
  • Supports 64 bit architecture
  • Supports Java development within Eclipse(using Team Explorer Everywhere 2010)

Build Automation

  • Integrate early, integrate often
  • Continuous integration
  • Builds on every Check-in
  • Gated check-in - Only if build succeeds the code gets checked-in to the source code repository.
  • Rolling builds to control frequency.

Branches and visualization

  • Visualize integration across all branches
  • Track the branches and change set.

Integrates with other version control systems and bug tracking systems using TFS Integration platform

Friday, March 25, 2011

Notes from Tech Ed 2011 India - 1

"Design,Performance and capacity factors for successful intranet and internet SharePoint sites" session was presented by Sanjay Narang from MCS and following notes were taken from the session. All credit goes to Sanjay for enlightening the full house.

RPS- Request per second 
An indicator to express the number of request served by the web farm irrespective of size of the request

Points to note while tracking the load of the server

  1. All Users - Total user base of the application
  2. Active users - Total users who are currently using the application
  3. Concurrent users - Total users who are currently using the same functionality concurrently(Given the nature of HTTP's disconnected architecture this'll be very few)
(Image from Microsoft Technet)


RPS Calculation
  1. Take IIS logs from all the servers in web farm
  2. Take from a peak hour traffic of a day
  3. Use tools like Log parser to query the log files collected.(how to use Log parser ?)
  4. Avoid requests for for image,CSS,JS while calculating RPS.
  5. Avoid Http 401's also
Decision point
  1. Average RPS on a day
  2. Average RPS in  a peak hour
  3. Max RPS in a peak hour
  4. Average daily concurrent users
  5. Peak concurrent users in peak time
Dataset
The size of data stored in a system is called as Dataset, typically in SharePoint world we call it as Content Database and its size

Points consider while planning for Dataset
  1. Content Database size
  2. Temp DB Size
  3. Transaction Log size
  4. Space required for full backup
  5. Number of documents and versions in content db's
  6. Number of metadata associated to the documents
  7. Number of other list items (need to calculate the size of the list item too)
Performance and Reliability
  1. Server availability - Overall uptime of the system
  2. Server responsiveness - A Farm's time taken to serve the request
  3. System resource utilization - CPU utilization and available memory
Boundaries and limits

When you plan for the capacity planning and management, it is essential to keep a tab on the product boundaries and limits
  1. Content Database size - 200 GB
  2. Site collection size  - Max 100 GB
  3. Site Collection per Content database - 5000 Max/2000 recommended
General recommendation of Servers
  • One WFE server per 10k users
  • One SQL instance per 4 WFE servers
  • 3-5 WFE Cores per Sql Core
  • One DC per three WFE servers
  • 2-4 GB memory per CPU core
High availability - points to consider
  • Hardware/Software load balancers
  • Cluster/Mirror of Sql server
  • Service applications associated to the app
  • Search target, dedicated/distributed
Sql Server memory recommendation
  • Small - 8 GB
  • Medium - 16 GB
  • To handle up to  2TB of data - 32 GB
  • To handle data from 2TB to 5TB - 64 GB
  • To handle more than 5 TB - Go for new instance of Sql server
As there is no perfect tool (yes there is a tool called HP Sizer is available)to tell you what kind of Farm is required for your purpose, it requires a careful assessment of all these points and the requirement is necessary to arrive at a conclusion. It is always recommended to do oversizing rather than undersizing(Want to know your servers are over sized/undersized, use performance monitor counters to gather data and analyse).

I guess most of the points were taken from this Technet Article. Nevertheless for those who need full set of information please go through that link. I don't find the deck presented from Tech Ed site, will provide a link when it's available.

Tuesday, March 15, 2011

List does not exist error


While adding a new list view web part to a homepage , stuck with the following exception.
List does not exist The page you selected contains a list that does not exist. It may have been deleted by another user.
After some fiddling, found Web.Id for a LVWP is required to resolve this issue. After providing the WebId for the ListViewWebPart, web part adds to the page perfectly.

ListViewWebPart lvp = new ListViewWebPart();
lvp.ListName = Web.Lists["Tasks"].ID.ToString("B").ToUpper()  ;
lvp.ZoneID = "Center";
lvp.Title = "Tasks List";
lvp.WebId = Web.ID;  
SPFile homePage = Web.GetFile("default.aspx");
SPLimitedWebPartManager webmngr = homePage.GetLimitedWebPartManager (PersonalizationScope. Shared);
webmngr.AddWebPart(lvp, "Center", 3);
webmngr.SaveChanges(lvp);

Happy SharePointing :)

Wednesday, March 9, 2011

Free alternatives for Redgate Reflector

Recently my Reflector time bombed and refused to open. As a SharePoint developer, this is one of the crucial tool in my toolbox to peep in to SharePoint binaries. Finally it seems like Redgate  betrayed .NET community for not keeping this little tool free and alive.
In search of an alternative for this great tool by Lutz Roeder, found some interesting projects.

ILSpy - a promising open source alternative.developed by SharpDevelop team.
Monoflector- uses Cecil,MEF
Resharper 6 Decompiler - Resharper is planning to provide a free stand alone decompiler,
Kaliro Explorer - bunch of other tools like Moss explorer, calendar sync are also available along with this
DotNet IL Editor - It can disassemble and debug the assemblies

Still wondering why this functionality is not integrated in VS 2010 ?

Tuesday, February 8, 2011

Adobe integrates Acrobat Reader X with SharePoint

Adobe's X series PDF editor and reader Acrobat X and Reader X now tightly integrates with SharePoint. We need to provide the OpenControl key in the DocIcon.xml and clients should use Acrobat X or Reader X to leverage.

Now it provides additional options like Edit Document, Check-in,Check out,Discard check out for PDF documents.

If I say Edit Document, PDF automatically opens the document in Reader X and also asks whether I want to check out

It also provides a UI cue for the checked out document too


Once the documents are checked out in MS Office suit, the document library page automatically refreshes to show the checked out icon but here that refresh is not happening.

How to configure SharePoint for this ?
  • You need to add the following lines in DocIcon.xml 
    • You can find DocIcon.xml in C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\XML
AdobePDF.png
  • Right click and save the above Acrobat PDF icon to your machine in the name of AdobePDF.png and copy it to folder C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES
  • Now do an IISRESET and let IIS load these new resources.
  • Repeat all the steps in all of your web front end servers
All these steps remain same for MOSS 2007, just change the \14\Template\XML to 12\Template\XML while doing modifications to DocIcon.xml and copying the AdobePDF.png file