SharePoint で ASP.NET AJAX を利用できるようにするには

NetAdvantage のような ASP.NET AJAX 対応のコンポーネントを ASP.NET アプリケーションで使用するには Visual Studio の ASP.NET AJAX Web アプリケーションテンプレート等を使用することで web.config に必要なアセンブリやスクリプトハンドラの参照を追加することができますが、Windows SharePoint Service (以下 WSS)または Microsoft Office SharePoint Server (以下 MOSS)のデフォルト状態では ASP.NET AJAX が使用できるようになっていません。

実際には WSS も MOSS も ASP.NET のアプリケーションということで、web.config に設定をしてあげれば ASP.NET AJAX を安心して使用することができます。CodePlex の Silverlight Blueprint for SharePoint など、他にも使用する価値があるようですね。

大まかな手順としては web.config に System.Web.Extensions アセンブリの参照設定を追加していくだけなのですが、間違いや重複項目があるとはじかれてしまうので慎重にいきましょう。僕も何度か泣きました。orz

必要なもの:

  • WSS 3.0 SP1 または MOSS SP1
  • .NET Framework 3.5

注意:ここでは ASP.NET AJAX を使用する WSS/MOSS サイトの仮想ディレクトリが C:\Inetpub\wwwroot\wss\VirtualDirectories\80 と想定して設定していますが、お使いのディレクトリに合わせた設定をしてください。また、お使いのサイトによってはすでに web.config 上に必要な項目が記載されていたり、別の項目が追加されたりしていることでここに載せてある内容とは若干異なる場合があります。

また、コードは以下のように表記されています。

青字 : すでに web.config 上に存在する項目

緑字 : ASP.NET AJAX を使用するために新たに追加する項目

[ASP.NET AJAX 使用設定手順]

1. まず <configSections> に最後の <sectionGroup> 項目として下記のセクションを追加します。ここでは ASP.NET AJAX 固有の設定項目を定義します。

<configuration>
    <configSection>
        <sectionGroup>
        …

<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
      <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
      <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
    </sectionGroup>
  </sectionGroup>
</sectionGroup>

2. 次に System.Web.Extensions が安全なコントロールとして認識されるように <SafeControls> に追加します。

<SharePoint>
    <SafeMode>
    …
    <WebPartcontrols>
    <SafeControls>

<SafeControl Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TypeName="*" Safe="True" />

3. HTTP ハンドラの定義にも項目の追加をします

<system.web>
  <httpHandlers>
    <remove verb="GET,HEAD,POST" path="*" />

    …

<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" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />

4. ScriptModule を <httpModules> に登録します

<system.web>
  <httpModules>
    <clear />
    <add name="SPRequest" type="Microsoft.SharePoint.ApplicationRuntime.SPRequestModule, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

  …

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

5. System.Web.Extensions アセンブリをコンパイル時に参照できるよう <assemblies> に追加します。

<system.web>
  <compilation batch="false" debug="false">
    <assemblies>
      <add assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />

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

6. System.Web.UI 名前空間内での asp タグが使用できるようタグを登録します。

<system.web>
  <pages>

  …
    <controls> 

<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

7. 最後に 1 で <configSections> に定義した項目の設定をします。これは</System.Workflow.ComponentModel.WorkflowCompiler> の下に追加します。

まず <system.web.extensions> を追加します。

<system.web.extensions>
  <scripting>
    <webServices>
      <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
      <!--
      <authenticationService enabled="true" requireSSL = "true|false"/>
    -->
      <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and writeAccessProperties attributes. -->
      <!--
    <profileService enabled="true"
                    readAccessProperties="propertyname1,propertyname2"
                    writeAccessProperties="propertyname1,propertyname2" />
    -->
    </webServices>
    <!--
    <scriptResourceHandler enableCompression="true" enableCaching="true" />
    -->
  </scripting>
</system.web.extensions>

その下にもうひとつの項目 <system.webServer> を追加します。

<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />
  <modules>
    <add name="ScriptModule" preCondition="integratedMode" 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>

ここまでできたらあとは ScriptManager (と、必要であればScriptManagerProxy) をページに配置していつものように開発を続けていくだけです。 WebDataGrid 等の AJAX コントロールが SharePoint 上で使えるようになりますね。

の全ての投稿を閲覧する

Powered by Community Server (Commercial Edition), by Telligent Systems