Web.config changes - Custom web services in SharePoint 2007 – Part 2

Please read the article "Add a Web service 2.0 in SharePoint 2007 step by step " before
continue this post. Then you will get some idea on what is the need of change in
web.config for implementing custom web service 2.0 in SharePoint.


SharePoint framework don't allow to call web services from java script by
default. For this, we explicitly tell the web application that when any request
from javascript to web services then use this http handlers, http modules and
allow *.asmx files to serve in SharePoint.


So, please follow the steps below.


Changes required in the sections.



  • HttpHandlers and httpModules in
    <System.Web> section.
  • Adding a new section named <System.WebServer>.
  • This is not needed, but useful if you have installed two versions of Ajax
    libraries[1.0 and 3.5] for System.Web.Extensions. Assembly binding redirect in
    <runtime>
  • Add  System.web.Extensions assembly to the <assemblies> section. This
    is very important.

Please add the sections as it is in the web.config file of your SharePoint
web site to get the web services 2.0 work.


1. <httpHeaders> section:
    <remove verb="*"
path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/></httpHandlers>


2. <httpModules> section:


    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>


3. <System.WebServer> section:


<system.webServer>
        <validation
validateIntegratedModeConfiguration="false"/>
        <modules>

            <remove name="ScriptModule"/>
            <add
name="ScriptModule" preCondition="managedHandler"
type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
       
</modules>
        <handlers>
            <remove
name="WebServiceHandlerFactory-Integrated"/>
            <remove
name="ScriptHandlerFactory"/>
            <remove
name="ScriptHandlerFactoryAppServices"/>
            <remove
name="ScriptResource"/>
            <add name="ScriptHandlerFactory"
verb="*" path="*.asmx" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

            <add name="ScriptHandlerFactoryAppServices" verb="*"
path="*_AppService.axd" preCondition="integratedMode"
type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

            <add name="ScriptResource" preCondition="integratedMode"
verb="GET,HEAD" path="ScriptResource.axd"
type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

        </handlers>
    </system.webServer>


4. <runtime> Section:


<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <dependentAssembly>
               
<assemblyIdentity name="System.Web.Extensions"
publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect
oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
           
</dependentAssembly>
            <dependentAssembly>

                <assemblyIdentity name="System.Web.Extensions.Design"
publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect
oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
           
</dependentAssembly>
        </assemblyBinding>


5. <assemblies> section:


Add this entry to <assemblies> section.


<add assembly="System.Web.Extensions, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


That's it!!! With these changes it will allow you to access web services from
java script. I spent my valuable time to find this way to solve so many
problems. Do you like this?