I see customers expressing more interest in is SharePoint Search.  Many clients are shocked to learn SharePoint has a powerful and very configurable search engine built in.  Search can crawl anything from network shares to public web sites.  Out of the box SharePoint supports the crawling and indexing of many file types which of course include Microsoft Office Documents.  However, SharePoint can be made aware of additional file types such as PDF's and DWG's. Furthermore, IFilters can be installed which allow search to index the content contained within files. 

For more information concerning supported file types and IFilters read this Technet Article.  The article lists all default file types and commonly added file types.  There are also links to configuration instructions.  This is a good article to keep book marked as a reference.

The .NET Framework allows developers to write managed code.  The term managed refers to how memory is handled by a computer system.  For example, C/C++ code is commonly known as unmanaged because developers must allocate and de-allocate memory.  In contrast, the .NET Framework provide a mechanism known as the Garbage Collector (GC) to de-allocate or collect object no longer in use.

I have found it particularly helpful to consider SharePoint a very large ASP.NET Application.  If you can visualize SharePoint as an ASP.NET application it becomes familiar and relatable.  If you begin to deconstruct SharePoint you will notice that it is comprised of Active Server Pages (ASPX), Master Pages, Style Sheets (CSS), User Controls (ASCX), Server Controls, Web Services (ASMX), Handlers, etc.  All these artifacts are common to ASP.NET developers.

SharePoint provides a rich API for developers to program against and extend this large "ASP.NET Application."  Two object commonly used in SharePoint development are SPSite and SPWeb.  Despite the names of these objects it must be understood that an SPSite object represents a site collection.  While an SPWeb object represent a site beneath a site collection.  Both of these object are managed wrappers of unmanaged code.  Furthermore, both of these object implement IDisposible.  So now for the million dollar question... When should you as a developer explicitly dispose of these object?  Well, the answer is, it depends.    

   1: String title;
   2:  
   3: using(SPSite siteCollection = new SPSite("http://mossdev"))
   4: {
   5:   using(SPWeb site = siteCollection.OpenWeb())
   6:    {
   7:        title = site.Title;
   8:    }
   9: }  

 

In the example above we created a new SPSite and SPWeb object.  We explicitly created a new SPSite object while we called the OpenWeb() method of SPSite to return a new SPWeb Object.  Since in effect we created new instances of both object we should dispose of both objects.   Note that, wrapping the objects within a using statement will automatically dispose of that object when it is no longer needed.   A good example of when not to dispose of an SPSite or SPWeb object is when a reference to an existing object is returned from a method call.  For example, the method call SPControl.GetContextSite() will return a reference to an SPSite object we did not create therefore we should not dispose of this particular SPSite object.  Disposing of this particular instance will crash current page and possibly the site.

Disposing of SharePoint objects such as SPSite and SPWeb will free both managed and unmanaged resources as soon as possible which will increase system performance and scalability.

Last week I was in Redmond, WA from April 13th to April 18th attending the Microsoft MVP Global Summit.  This was my second year attending the event and it was quite amazing.  Some of the highlights included participating in Open Spaces Sessions and seeing both Ray Ozzie and Steve Ballmer speak.  Steve is quite energetic to say the least.

A few days prior to the event I received a phone call from SearchITChannel.com's, senior news editor, Barbara Darrow wanting to interview me about being an MVP and the up coming summit.  I was flattered by her call and took time to answer her questions.  On Monday the 14th she sent me this link http://searchitchannel.techtarget.com/news/article/0,289142,sid96_gci1309724,00.html to her story in which I am quoted.  The story includes quotes from several fellow MVP's including Shane Young. 

I have really enjoyed attending the MVP summit twice now because it is an opportunity for MVP's to give Microsoft direct product feedback and boy do we.  The event is also a great opportunity to network with other MVP's and Microsoft Employees.

  

Technorati Tags: ,,

Problem: We were installing code on a MOSS 2007 Medium Farm Deployment.  We noticed the servers were missing sever WSS/MOSS 2007 related patches.  We applied the missing patches but then realized Search was no longer functioning properly.  One of the most noticeable issues was we could no longer access the "Search Settings" page under the primary SSP.  Prior to applying the patches this page was accessible but now we just saw a 403 Forbidden Error.  The event logs and the SharePoint logs weren't much help either.  Basically, we knew the problem had something to do with permissions but we couldn't find any hits where to look.  Additionally, this seemed to be the only page having issues.

Solution: After searching several blogs and MSDN I finally found a single post http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2793573&SiteID=17&mode=1 by Jörgen Bjerkesjö that provided the solution.  The problem is caused by the local wss_wpg server account not having write access to the %windir%\tasks folder, usually c:\windows\tasks folder.  This folder is used by Windows Task Scheduler.  So to fix the problem the wss_wpg account needs to be given write access to the c:\windows\tasks folder on the index server. 

Note: The c:\windows\tasks folder is a hidden folder by default.

Steps:

  • On Index Server or all server in farm
  • Open a command prompt and type attrib -s %windir%\tasks <enter>
  • Browse to %windir%\tasks, right click and select properties.  Add the WSS_WPG group and grant Read & Write permissions on the tasks folder.
  • Open a command prompt and type attrib +s %windir% \tasks <enter>
  • On Monday January, 28th my SpringPoint colleague Scott Brenton and I will be co-presenting on Visual Studio 2008 RTM at the Tulsa Developers .NET User Group.  Our presentation is a Tips and Tricks session with a little something for everyone.  We will have tips for beginners and seasoned pros.  The presentation will begin with and intro of Visual Studio 2008 and by the conclusions attendees should understand the benefits of upgrading.  Furthermore, the Visual Studio 2008 environment should not feel completely foreign.  Our presentation will include such topics as:

    • Keyboard Short Cuts
    • Refactoring
    • Auto-Implemented Properties
    • VSTO Projects
    • JavaScipt Intellisense and Debugging
    • Project Navigation
    • Source Server
    • MS Build and Build Targeting
    • Solution Upgrading

    Problem:

    We just installed a Medium MOSS 07 Farm.  The Farm has two front end webs and a dedicated indexing server.  The two front end webs are configured to execute search queries.  The SSP Admin site was loading and a search content source could be selected.  However, after specify a schedule for the selected content source and clicking ok an access denied error would appear on the schedule management window.  The message said "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))."  The MOSS Error Logs captured the following nastiness:

    w3wp.exe (0x0B5C) 0x0E48 Search Server Common MS Search Administration 86zc High Exception caught in Search Admin web-service proxy (client). System.Web.Services.Protocols.SoapException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at Microsoft.Office.Server.Search.Administration.SearchWebServiceProxy.RunWithSoapExceptionHandling[T](String methodName, Object[] parameters)

    ... and more

    Resolution:

    The log and error message hinted at some kind of permission issue.  We also noticed that the logs specifically implicated our third server in the farm, our dedicated index server.  After some searching on MSDN and TechNet we learned that the C:\Windows\Tasks directory was not configured properly.  The local WSS_WPG machine needed to be given read and write permissions to the C:\Windows\Tasks directory.  Once we had assigned appropriate permissions and completed an IISReset form good measures we were able to save a schedule. 

    For more info review this MS KB posting: http://support.microsoft.com/kb/926959

     

    As a consultant a chief complaint I hear about SharePoint is a lack of documentation.  MS must have been listening because the Documentation Team is now blogging: http://blogs.msdn.com/sharepointdeveloperdocs/ as a way to get needed answers to customers  faster. 

    Tonight (12/03/2007) I attended the Tulsa, OK .NET User Group's Visual Studio InstallFest organized by David Walker.  The event had an amazing turnout with over 150 people in attendance.  We had a great time networking and installing Visual Studio 2008.

    | |

    On Monday 11/19/2007 @ 10:30 PM, after 2 hour and 45 minutes of pushing (ouch), Carrie gave birth to our first child.  Kate was 7lbs 1 ounce and 17.5 inches long.  We've posted some pictures on Shutterfly at http://katebottjer.shutterfly.com.  Needless to say we had something special to be thankful for this Thanksgiving.

    GoingHome Going home.

    It is generally recommend NOT to tamper with a SharePoint database.  Seems like the warning not to remove the label from your mattress. :) However, it is safe to run several SQL Server 2005 Maintenance Plan Tasks against SharePoint databases such as:

    • Check database integrity
    • Reduce a database
    • Reorganize an index
    • Clean up the history
    • Update statistics
    • Rebuild an index

    Source: http://support.microsoft.com/default.aspx?scid=kb;EN-US;932744

    When I refer to SharePoint I am referring to both Windows SharePoint Services 3.0 (WSS 3.0) and Microsoft Office SharePoint Server (MOSS 2007).  SharePoint is often thought of as an intranet portal.  However, many public web sites are now powered by SharePoint.  One compelling reason for this is the powerful publishing capabilities built into MOSS 2007 Enterprise.  Furthermore, it is much easier to brand sites in the latest versions of SharePoint then previous versions.  SharePoint know leverages masterpages introduced is ASP.NET 2.0 and CSS which have reduced the number of required file modifications to brand a site.  The following are several custom branded SharePoint Sites.

    http://www.glu.com/noram/Pages/home.aspx

    http://www.hawaiianair.com/Pages/Index.aspx

    http://www.migros.ch/DE/home/Seiten/Home.aspx

    http://www.nspi.com/Pages/Home.aspx

    Leveraging Virtual Machines is a great way to develop against SharePoint.  I was trying to update Visual Studio 2005 on a dev VM to SP1 and kept receiving "Error 1718. File FileName was rejected by digital signature policy."  The cause of this error is actually related to a lack of Virtual Memory.  However, I still received the error after increasing the virtual memory. The HotFix available in this http://support.microsoft.com/kb/925336 MS Support Article resolved the issue.

    Found this project, http://research.microsoft.com/Pex/ from MS Research which apparently dynamically generates tests and code analysis during active development.  Interesting way to enforce code quality and just prove requirements are being met.

    http://sharepoint.microsoft.com/pedia/Pages/Home.aspx - this site is described not as a Wiki but as a collection information, in various media formats, about SharePoint.

    http://www.codeplex.com/servicesengine - is a Microsoft project released to CodePlex.  This project has definitely grabbed my attention but I would really like to understand it better.  So far I know it provides guidance around WCF Services.  But does it simply help you generate a WCF based service tier or the MSE more like an Enterprise Service Bus implemented with WCF?  If you can provide clarity on this project please do so.

    More Posts Next page »