InfoPath Forms Services 匿名アクセスで投稿したい! Part 3

Part 1.WCF サービスの開発

Part 2.WCF サービスの展開

Part 3.バーチャルパスプロバイダの開発と展開

Part 4.InfoPath フォームでのデータ接続

Part 5.InfoPath フォームの発行

 

Part 2 SharePoint フロントエンド Web サーバーに WCF サービスとして展開しました。しかし virtualPath エラーとなりました。Part 3 ではこのエラーを解決するため、バーチャルパスプロバイダを作成、展開します。

 

バーチャルパスプロバイダの開発と展開

1.      Visual Studio [クラスライブラリ] プロジェクトを新規作成します。(プロジェクト名は MyVPathProvider とします)

2.      System.Web.dll を参照追加します。

3.      次の using を追加します。

using System.Web.Hosting;

using System.Web;

 

4.       次のようにクラスを実装します。

public class WCFVirtualPathProvider : VirtualPathProvider

{

   public override string CombineVirtualPaths(string basePath, string relativePath)

   {

      return Previous.CombineVirtualPaths(basePath, relativePath);

   }

   public override bool FileExists(string virtualPath)

   {

      string fixedVirtualPath = virtualPath;

      if (virtualPath.StartsWith("~") && virtualPath.EndsWith(".svc"))

      {

         fixedVirtualPath = this.CombineVirtualPaths("/", virtualPath);

      }

      return Previous.FileExists(fixedVirtualPath);

   }

   protected override void Initialize()

   {

      base.Initialize();

   }

}

 

public class WCFVPPRegModule : IHttpModule

{

   static bool wcfProviderInitialized = false;

   static object locker = new object();

 

   public void Init(HttpApplication context)

   {

     if (!wcfProviderInitialized)

     {

        lock (locker)

        {

          if (!wcfProviderInitialized)

          {

            WCFVirtualPathProvider wcfVPP = new WCFVirtualPathProvider();

            HostingEnvironment.RegisterVirtualPathProvider(wcfVPP);

            wcfProviderInitialized = true;

           }

         }

      }

    }

   public void Dispose()

   {

   }

}

 

5.      厳密名を付けてビルドし、フロントエンド Web サーバーの GAC MyVPathProvider.dll を登録します。

6.      SharePoint Web アプリケーションの web.config にバーチャルパスプロバイダを登録します。
※ ここで編集するのは InfoPathSv フォルダ内の web.config ではなく、SharePoint Web アプリケーションの Web.config (C:InetpubwwwrootwssVirtualDirectories80内のやつ) です。

7.      web.config に次の内容を追加し、上書き保存します。
(<httpModules>
タグの中に入れます。公開キートークンの値は適切なものに変更してください)

<add name="WCFVPPRegModule" type="MyVPathProvider.WCFVPPRegModule, MyVPathProvider, Version=1.0.0.0, Culture=neutral,PublicKeyToken=5f3ab9ce827b3779" />

 

ブラウザで再度 InfoPathWcf.svc にアクセスします。(http://ServerName/InfoPathSv/InfoPathWcf.svc) 今度はエラーになりません。

これで、InfoPath フォームをライブラリにアップロードする WCF サービスを展開できました♪

次はこのサービスを InfoPath から利用する方法をご紹介します。

 

奥田理恵

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中