次の方法で共有


WCF ベースのコード サンプルの前提条件

適用対象: Office 2010 | Project 2010 | Project Server 2010 | SharePoint Server 2010

この記事の内容
開発環境をセットアップする
アプリケーションを作成してサービス参照を追加する
その他の参照を設定する
サービス構成ファイルを追加する
クレームの複数認証を使用する
一般的な定数の値を変更する
結果を確認する
クリーンアップする

Microsoft Project Server 2010 用に作成された「クラス ライブラリと Web サービス参照」のコード サンプルは、Windows Communication Foundation (WCF) サービスを使用する標準的な形式に準拠しています。このサンプルは、コンソール アプリケーション内にコピーして完全なユニットとして実行できるように作られています。例外はサンプルに記載されています。

Office Project Server 2007 用に作成されたサンプルから変更のない Project 2010 SDK のコード サンプルでは、ASMX Web サービスを使用しています。この ASMX ベースのサンプルは、WCF サービスを使用するように調整することもできます。この記事では、このサンプルを WCF サービスで使用する方法を説明します。このサンプルを ASMX Web サービスで使用する方法の詳細については、「ASMX ベースのコード サンプルの前提条件」を参照してください。

注意

新しいアプリケーションは、ネットワーク通信のためのマイクロソフト推奨テクノロジである WCF インターフェイスを使用する必要があります。ASMX インターフェイスを使用する既存のアプリケーションは、Project Server の権限を確認する Project Web App を介してその URL を使用する必要があります。

SharePoint Web Services アプリケーションにおける WCF サービスの URL は、Project Server コンピューターでのみ動作するミドルウェア コンポーネントや、偽装を使用するアプリケーションで使用できます。WCF インターフェイスと ASMX インターフェイスの詳細については、「WCF と PSI の概要」を参照してください。

コード サンプルを実行する前に、開発環境のセットアップ、アプリケーションの構成、サービス構成ファイルの追加 (またはプログラムによる WCF サービスの構成)、および環境に合わせた一般的な定数値の変更を行う必要があります。この記事には、以下のセクションが含まれます。

  • 開発環境をセットアップする

  • アプリケーションを作成してサービス参照を追加する

    • Intellisense の説明を備えた PSI プロキシ アセンブリを使用する

    • PSI プロキシ ファイルを追加する

    • サービス参照を追加する

  • その他の参照を設定する

  • サービス構成ファイルを追加する

  • クレームの複数認証を使用する

  • 一般的な定数の値を変更する

  • 結果を確認する

  • クリーンアップする

開発環境をセットアップする

  1. テスト用の Project Server システムをセットアップする。

    開発やテストを行う際には常にテスト Project Server システムを使用します。たとえコードが完全に動作しても、プロジェクト間の依存関係、レポート、またはその他の環境要因が意図しない結果を引き起こす可能性があります。

    注意

    サーバーの有効なユーザーであり、アプリケーションで使用する Project Server Interface (PSI) 呼び出しのための十分な権限を持っていることを確認します。

    場合によっては、サーバーでのリモート デバッグが必要になることがあります。また、Project Server コンピューターへのイベント ハンドラー アセンブリのインストールによるイベント ハンドラーのセットアップと、Project Web App の [サーバー設定] ページを使用したイベント ハンドラーの構成が必要になることもあります。

  2. 開発用コンピューターをセットアップする。

    通常、PSI にはネットワーク経由でアクセスします。コード サンプルは、記載されている場合を除き、サーバーから分離されたクライアントで動作するように作られています。

    1. 適切なバージョンの Microsoft Visual Studio をインストールする。   記載されている場合を除き、コード サンプルは、Microsoft Visual C# で書かれており、Microsoft Visual Studio 2008 SP1 または Microsoft Visual Studio 2010 で使用できます。

      注意

      Visual Studio 2008 は、Project Server 2010 向けに開発されたほとんどのアプリケーションで使用できます。Project Server ワークフロー アプリケーションは、Visual Studio 2010 を使用して、Project Server コンピューターに展開する必要があります。Visual Studio 2010 は、すべての Project Server 展開で推奨されます。

    2. Project Server の DLL を開発用コンピューターにコピーする。   非ワークフロー アプリケーションでは、次のアセンブリを Project Server コンピューターの [Program Files]\Microsoft Office Servers\14.0\Bin から開発用コンピューターにコピーします。

      • Microsoft.Office.Project.Server.Events.Receivers.dll

      • Microsoft.Office.Project.Server.Library.dll

      注意

      ワークフロー アプリケーションは Project Server コンピューター上で開発する必要があります。詳細については、「Project Server ワークフローを開発する」を参照してください。

    3. PSI で WCF サービスの ProjectServerServices.dll プロキシ アセンブリをコンパイルして使用する方法に関する情報については、「Intellisense の説明を備えた PSI プロキシ アセンブリを使用する」を参照してください。

  3. Intellisense の説明をセットアップします。

    Project Server アセンブリでクラスとメンバーに関する IntelliSense の説明を使用するには、Project 2010 SDK ダウンロードに含まれている IntelliSense XML ファイルを、Project Server アセンブリと同じディレクトリにコピーします。たとえば、アプリケーションで Microsoft.Office.Project.Server.Library.dll アセンブリへの参照を設定するディレクトリに、Microsoft.Office.Project.Server.Library.xml ファイルをコピーします。

    PSI サービスで Intellisense の説明を使用するには、ProjectServerServices.dll プロキシ アセンブリで ProjectServerServices.xml ファイルを使用する必要があります。

アプリケーションを作成してサービス参照を追加する

  1. コンソール アプリケーションを作成する。

    コンソール アプリケーションを作成するには、[新しいプロジェクト] ダイアログ ボックスのドロップダウン リストから [.NET Framework 3.5] を選択します。この新しいアプリケーションに PSI サンプル コードをコピーできます。

  2. WCF に必要な参照を追加する。

    [参照の追加] ダイアログ ボックスの [.NET] タブで、System.ServiceModel への参照を追加します。Web アプリケーションの場合は、System.ServiceModel.Web を使用します。

    System.Runtime.Serialization への参照を追加します。

  3. コードをコピーする。

    コード サンプル全体をコンソール アプリケーションの Program.cs ファイルにコピーします。

  4. サンプル アプリケーションの名前空間を設定する。

    サンプルの上部に記されている名前空間をアプリケーションの既定の名前空間に変更するか、アプリケーションの既定の名前空間をサンプルに合わせて変更することができます。アプリケーションの既定の名前空間は、アプリケーションのプロパティで確認できます。

    たとえば、CreateNewAssignment のコード サンプルの名前空間は Microsoft.SDK.Project.Samples.CreateNewAssignment です。Program.cs ファイルから名前空間をコピーし、プロジェクトの [プロパティ] ウィンドウを開きます ([プロジェクト] メニューで [CreateNewAssignment のプロパティ] をクリック)。[アプリケーション] タブで、その名前空間を [既定の名前空間] テキスト ボックスにコピーします。

  5. サービス参照を設定する。

    多くの例では、1 つ以上の PSI サービスへの参照が必要です。これらは、サンプル自体、またはサンプルの前にあるコメントに示されています。サービス参照の適切な名前空間を取得するには、最初にアプリケーションの既定の名前空間を設定する必要があります。

    WCF サービス参照を追加する方法として次の 3 つがあります。

    • ProjectServerServices.dll PSI プロキシ アセンブリをコンパイルしてから、このアセンブリへの参照を設定します。詳細については「Intellisense の説明を備えた PSI プロキシ アセンブリを使用する」を参照してください。

    • PSI プロキシのソース コード ファイルを Visual Studio ソリューションに追加します。詳細については、「PSI プロキシ ファイルを追加する」を参照してください。

    • Visual Studio を使用してサービス参照を追加します。詳細については、「サービス参照を追加する」を参照してください。

      注意

      Visual Studio にサービス参照を追加するには、Project Server コンピューター上のバックエンドの Project Server Service アプリケーション ディレクトリにある web.config ファイルを一時的に変更する必要があります。最初の 2 つの方法のどちらかを使用することをお勧めします。

Intellisense の説明を備えた PSI プロキシ アセンブリを使用する

PSI のすべてのパブリック WCF サービスには プロキシ アセンブリを使用できます。ProjectServerServices.dll プロキシ アセンブリを Project 2010 SDK ダウンロードの Documentation\Intellisense\WCF\CompileWCFProxyAssembly.cmd スクリプトを使ってコンパイルしてから、開発コンピューターにコピーします。同じ場所に、Intellisense に関する ProjectServerServices.xml ファイルをコピーします。Visual Studio で、この ProjectServerServices.dll プロキシ アセンブリへの参照を設定します。

Project Server のサービス パックおよび更新プログラムの場合は、同じ SDK ダウンロード フォルダーにある GenWCFProxyAssembly.cmd スクリプトを使用し、プロキシのソース ファイルを更新して新しいプロキシ アセンブリを作成できます。詳細については、「[方法] WCF サービスのプロキシ アセンブリを作成する」を参照してください。SDK ダウンロードのリンクについては、「Project 2010 SDK のドキュメント」を参照してください。

注意

Project Server のサービス パックおよび更新プログラムの場合は、WCF 用の更新されたプロキシのソース ファイルと新しい PSI プロキシ アセンブリを作成することができます。詳細については、「[方法] WCF サービスのプロキシ アセンブリを作成する」を参照してください。

ASMX Web サービスと WCF サービスのために作成された恣意的な名前空間はどちらも同じなので、Intellisense 用の ProjectServerServices.xml ファイルはどちらのバージョンでも動作します。たとえば、WCF ベースのプロキシ アセンブリでも ASMX ベースのプロキシ アセンブリでも、Resource サービスの名前空間は SvcResource です。もちろん、この名前空間の名前は変更できます。ただし、名前を変更できるのは、独自のプロキシ アセンブリを作成していて、プロキシ アセンブリと ProjectServerServices.xml ファイルの中で名前空間が一致している場合に限られます。SDK 内のあるコードサンプルが PSI Web サービスの名前空間で別の名前 (ProjectSvc など) を使用している場合は、SvcProject を使用するようにそのサンプルを変更して、プロキシ アセンブリ内の名前と一致させる必要があります。

WCF ベースのプロキシ アセンブリを使用する利点は、次のとおりです。

  • ほとんどのソリューション (ワークフロー ソリューション以外) を、Project Server コンピューターとは別のコンピューター上にあるこのプロキシ アセンブリで開発できます。ただし、個々のサービス参照の設定には、Project Server コンピューター上にあるローカルの Project Services アプリケーションへのアクセスが必要です。

  • このプロキシ アセンブリにはすべての PSI サービス名前空間が含まれるので、複数のサービス参照を使用する必要がありません。

  • ProjectServerServices.xml ファイルを ProjectServerServices.dll プロキシ アセンブリへの参照を設定するのと同じディレクトリに追加すれば、PSI クラスおよびメンバーに関する Intellisense 記述を取得できます。詳細については、SDK ダウンロードの Documentation\Intellisense フォルダーにある ReadMe ファイルを参照してください。

このプロキシ アセンブリを使用する場合の欠点は、ソリューションが大規模になることと、ソリューションと共にプロキシ アセンブリの配布とインストールが必要になることです。また、プロキシ アセンブリと Intellisense ファイルの中で同じ名前空間を使用する必要があります (ただし、スクリプトを修正して、独自のプロキシ アセンブリを作成し、別々の名前空間を使用するように ProjectServerServices.xml Intellisense ファイルを変更した場合は例外です)。

PSI プロキシ ファイルを追加する

Project 2010 SDK ダウンロードには、SvcUtil.exe コマンドによって生成されたプロキシ アセンブリのソース ファイルも含まれています。このソース ファイルは Documentation\Intellisense\WCF サブディレクトリの Source.zip 内にあります。プロキシ アセンブリへの参照を設定する代わりに、このソース ファイルを Visual Studio ソリューションに追加できます。たとえば、Project サービスと Resource サービスを使用するには、wcf.Project.cs ファイルと wcf.Resource.cs ファイルをソリューションに追加します。

WCF では、それぞれの PSI サービスの主要なクラスが、インターフェイスによって定義され、そのメンバーにアクセスするためのクライアント クラス内で実装されます。たとえば、主要な PSI インターフェイスである SvcProject.Project は、SvcProject.ProjectClient クラス内で実装されています。ProjectClient オブジェクトを、たとえば projectClient という名前のクラス変数として定義するには、以下のコードを使用します。この例では、SetClientEndpoints メソッドによって、basicHttp_Project エンドポイントを使用する projectClient オブジェクトが作成されます。このエンドポイントは app.config ファイルで定義されています。app.config ファイルの詳細については、セクション「サービス構成ファイルを追加する」を参照してください。

private static SvcProject.ProjectClient projectClient;
. . .
private static void SetClientEndpoints()
{
  projectClient = new SvcProject.ProjectClient("basicHttp_Project");
  . . .
}

public void DisposeClients()
{
  projectClient.Close();
  . . .
}

注意

PSI プロキシ アセンブリを使用する場合も、プロキシ ファイルを追加して SvcProject という名前の Project サービス参照を追加する場合も、projectClient オブジェクトの作成と廃棄には同じコードが使用されます。

サービス参照を追加する

WCF ベースのプロキシ アセンブリを使用したり、PSI サービスのプロキシ ファイルを追加したりしない場合は、1 つ以上のサービス参照を Visual Studio 内で直接設定できます。

注意

サービス参照を設定するには、Project Service アプリケーション ディレクトリの web.config ファイルを一時的に交換する必要があります。Visual Studio 内でサービス参照を直接追加するよりも、ProjectServerServices.dll プロキシ アセンブリを使用するか、プロキシ ソース ファイルを追加することをお勧めします。

以下の手順は、テスト用の Project Server を実行しているコンピューターで Visual Studio 2010 を使用することによってサービス参照を設定する方法を示しています。

  1. [方法] WCF サービスのプロキシ アセンブリを作成する」の説明に従って web.config ファイルを交換してから、iisreset を実行します。

  2. ソリューション エクスプローラーで、[参照設定] フォルダーを右クリックし、[サービス参照の追加] をクリックします。

  3. [サービス参照の追加] ダイアログ ボックスの [アドレス] テキスト ボックスに「https://localhost:32843/[GUID]/psi/<サービス名>.svc」と入力し、Enter キーを押します。[GUID] の部分は、Project Server サービス アプリケーションの仮想ディレクトリ名に置き換えます (例: 「c476f85e5c614de991e345e5127e20dc」)。<サービス名> の部分は、サービスの名前に置き換えます (例: 「Project」)。

    Project Server Service 仮想ディレクトリの名前は、以下のどちらかの方法で取得できます。

    • Internet Explorer で SharePoint 2010 サーバーの全体管理アプリケーションを開きます。[サービス アプリケーションの管理] をクリックし、目的の Project Server Service アプリケーションをクリックします。たとえば、[ProjectServerService] をクリックします。[Project Web App サイトの管理] ページの URL に仮想ディレクトリ名が含まれています。たとえば、https://localhost:36701/_admin/managepwa.aspx?appid=c476f85e-5c61-4de9-91e3-45e5127e20dc の場合、仮想ディレクトリ名は c476f85e5c614de991e345e5127e20dc です。

    • Project Server コンピューターで [インターネット インフォメーション サービス (IIS) マネージャー] ダイアログ ボックスを開きます。[接続] ウィンドウの [SharePoint Web サービス] ノードを展開し、PSI フォルダーを含むディレクトリが見つかるまで、その下位にあるサービス仮想ディレクトリを展開していきます。見つかったディレクトリを選択し、[操作] ウィンドウの [詳細設定] をクリックして、そのディレクトリ名を [仮想パス] フィールドにコピーします。

      注意

      複数の Project Server Service 仮想ディレクトリが存在することがあります。その場合は、目的とする Project Web App インスタンスを含む仮想ディレクトリを選択してください。

    • SharePoint Server 2010 と共にインストールされている Windows PowerShell 内の get-SPServiceApplication コマンドレットを使用します。タスク バーの [スタート] ボタンをクリックし、[すべてのプログラム]、[Microsoft SharePoint 2010 製品]、[SharePoint 2010 管理シェル] の順にクリックします。以下は、[SharePoint 2010 管理シェル] ウィンドウで定義済みサービス アプリケーション (GUID は異なります) に対してコマンドを実行した結果です。Project Server サービス アプリケーションの GUID をコピーします。

      PS > get-SPServiceApplication 
      DisplayName          TypeName             Id
      -----------          --------             --
      Secure Store Service Secure Store Serv... e23c707b-f94d-4079-86a3-4ee99ed88c60
      State Service        State Service        9f15ce66-95a5-4a13-86c5-9df7fd1fb3de
      Project Server Se... Project Server PS... c476f85e-5c61-4de9-91e3-45e5127e20dc
      PerformancePoint ... PerformancePoint ... b85e01e9-d414-4126-92d5-ee36dfc69668
      Excel Services Ap... Excel Services Ap... 8c40adc1-36bf-45e5-984b-39d547256c74
      Security Token Se... Security Token Se... 3b19014f-1f5d-4e46-8c6f-2ddb42e89544
      Application Disco... Application Disco... a585e505-e56e-4e2f-be70-37859c83ff3e
      WSS_UsageApplication Usage and Health ... 0d938d1c-6761-4848-afe4-b5567d4d4f7e
      Search Administra... Search Administra... 999b518e-69f8-429a-9766-985aa7d75d1b
      SharePoint Server... SharePoint Server... f268bbc9-4afd-43f2-ad27-082ef52e9955
      Search Service Ap... Search Service Ap... 9d4ef748-90a1-4207-add6-5b232fcaf7b4
      

      Project Server Service アプリケーションの完全な名前がわかる場合は、その名前に基づいて GUID 値を取得できます。次に例を示します。

      PS > $projectService = "Project Server Service Application"
      PS > (Get-SPServiceApplication | where { $_.Name -eq $projectService }).Id
      
      Guid
      ----
      c476f85e-5c61-4de9-91e3-45e5127e20dc
      

      注意

      GUID からダッシュを削除すると仮想ディレクトリ名になります。

    https://localhost:32843/c476f85e5c614de991e345e5127e20dc/PSI/Project.svc のような URL が Project Server サービスの標準 URL です。

  4. サービス参照の解決後、[名前空間] テキスト ボックスに参照名を入力します。Project 2010 SDK のコード サンプルでは、Svc<サービス名> という恣意的な名前空間名を使用しています。たとえば、このコード サンプルの Project サービスは SvcProject という名前になっています。

  5. Project Service ディレクトリに元の web.config ファイルを戻し、iisreset を再実行します。

その他の参照を設定する

Project Server アプリケーションでは、Microsoft SharePoint Foundation 2010 Web Services のようなほかのサービスを使用することがよくあります。ほかのサービスや参照が必要な場合は、コード サンプルにそれらが記されています。

コード サンプルのローカル参照は、サンプルの上部の using ステートメントに示されています。

  1. ソリューション エクスプローラーで、[参照設定] フォルダーを右クリックし、[参照の追加] をクリックします。

  2. [参照] をクリックし、以前にコピーした Project Server の DLL が保存されている場所に移動します。目的の DLL 群を選択し、[OK] をクリックします。

注意

開発用コンピューター上のアセンブリのバージョンがターゲット Project Server コンピューターのものと厳密に一致していることを確認します。

サービス構成ファイルを追加する

アプリケーションがプログラムによって WCF サービスを構成する場合、サービス構成ファイルは使用されません。それ以外の場合、Windows アプリケーションまたはコンソール アプリケーションでは app.config ファイルの system.serviceModel 要素を使用し、Web アプリケーションでは web.config ファイルの system.serviceModel をインクルードします。app.config ファイルの使用方法や、WCF サービスをプログラムで構成する方法については、「[ウォークスルー] WCF を使用して PSI アプリケーションを開発する」を参照してください。

SvcUtil.exe コマンドでサービス プロキシのソース ファイルを生成すると、app.config ファイルまたは web.config ファイルの既定の system.serviceModel 要素の基になる output.config ファイルも作成されます。Project 2010 SDK ダウンロードの Documentation\Intellisense\WCF\Source.zip には、サンプルの output.config ファイルが含まれています。たとえば、SvcUtil.exe によって WssInterop サービス用に作成される既定の output.config ファイルには、CustomBinding_WssInterop と CustomBinding_WssInterop1 という 2 つのカスタム バインドが含まれます。client 要素には、既定のエンドポイントが 2 つ含まれます。次のように、1 つは 32844 番ポートの HTTPS アドレス用、もう 1 つは 32845 番ポートの TCP アドレス用です。

<client>
    <endpoint address="https://ServerName.domain:32844/[GUID]/PSI/WssInterop.svc"
        binding="customBinding" bindingConfiguration="CustomBinding_WssInterop"
        contract="SvcWssInterop.WssInterop" name="CustomBinding_WssInterop" />
    <endpoint address="net.tcp://ServerName.domain:32845/[GUID]/PSI/WssInterop.svc"
        binding="customBinding" bindingConfiguration="CustomBinding_WssInterop1"
        contract="SvcWssInterop.WssInterop" name="CustomBinding_WssInterop1">
        <identity>
            <dns value="ServerName" />
        </identity>
    </endpoint>
</client>

PSI サービス構成では、既定のバインドやエンドポイントを使用しません。Project Server では、バックエンド サービスの呼び出しでルーターとして動作するフロントエンド ProjectServer.svc を介してアプリケーションが PSI サービスにアクセスする必要があります。app.config ファイルを作成するには、以下の手順を実行します。

  1. ProjectServerServices.dll プロキシ アセンブリへの参照を設定したり、あるサービス用のプロキシ ソース ファイルを追加したりする場合、アプリケーションには app.config ファイルが含まれません。その場合は、新しいアイテムを Visual Studio に追加します。[新しいアイテムの追加] ダイアログ ボックスで、[アプリケーション構成ファイル] テンプレートを選択し、その名前を「app.config」にして、[追加] をクリックします。

  2. app.config ファイルのすべてのテキストを削除し、以下のコードをこのファイルにコピーします。それぞれのサービス エンドポイントでは、同じバインド (たとえば、basicHttpConf) を使用できます。複数のバインドを使用する場合 (たとえば、HTTP と HTTPS の両プロトコルをバインドする場合) は、プロトコルごとにバインドを作成する必要があります。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <system.serviceModel>
            <behaviors>
                <endpointBehaviors>
                    <behavior name="basicHttpBehavior">
                        <clientCredentials>
                            <windows allowedImpersonationLevel="Impersonation" />
                        </clientCredentials>
                    </behavior>
                </endpointBehaviors>
            </behaviors>
            <bindings>
                <basicHttpBinding>
                    <binding name="basicHttpConf" sendTimeout="01:00:00" 
                        maxBufferSize="500000000" maxReceivedMessageSize="500000000">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                            maxArrayLength="16384" maxBytesPerRead="4096" 
                            maxNameTableCharCount="500000000" />
                        <security mode="TransportCredentialOnly">
                            <transport clientCredentialType="Ntlm" realm="http://SecurityDomain" />
                        </security>
                    </binding>
                </basicHttpBinding>
            </bindings>
            <client>
                <endpoint address="https://ServerName/ProjectServerName/_vti_bin/PSI/ProjectServer.svc"
                    behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
                    bindingConfiguration="basicHttpConf" 
                    contract="SvcServiceName.ServiceName"
                    name="basicHttp_ServiceName" />
            </client>
        </system.serviceModel>
    </configuration>
    
  3. クライアント エンドポイント アドレスの ServerName/ProjectServerName の部分は、サーバーおよび Project Web App インスタンスの名前で置き換えます。

  4. <サービス名> の部分は、「WssInterop」のような PSI サービスの名前に置き換えます。たとえば、次のようにサービス名の 3 つのインスタンスすべてを確実に置き換えてください。

    <endpoint address="http://myserver/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" 
        contract="SvcWssInterop.WssInterop"
        name="basicHttp_WssInterop" />
    
  5. 複数の PSI サービスを使用するには、サービスごとに、またサービスが使用する binding ごとに、1 つの endpoint 要素を作成します。たとえば、以下のエンドポイントでは、WssInterop サービスと QueueSystem サービスで基本的な HTTP バインドを使用するようにクライアントを構成しています。

    <client>
    <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" 
        contract="SvcWssInterop.WssInterop"
        name="basicHttp_WssInterop" />
    <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" 
        contract="SvcQueueSystem.QueueSystem"
        name="basicHttp_QueueSystem" />
    </client>
    

ヒント

Visual Studio の WCF サービス構成エディター ([ツール] メニューにあります) を使用すると、app.config ファイルを編集できます。[Microsoft Service Configuration Editor] ダイアログ ボックスで contract 要素を設定する際、ソリューションで PSI プロキシ アセンブリを使用する場合は、bin\debug ディレクトリの ProjectServerServices.dll を開きます。[コントラクト型ブラウザー] ダイアログ ボックスに、WCF サービス コントラクトのすべてが表示されます (図 1 を参照)。

ソリューションで wcfWssInterop.cs のようなサービス プロキシ ファイルを使用する場合は、アプリケーションをコンパイルして bin\debug ディレクトリ内の実行ファイルを開きます。app.config ファイルの編集の詳細については、「[ウォークスルー] WCF を使用して PSI アプリケーションを開発する」を参照してください。

図 1. Microsoft Service Configuration Editor でのコントラクト型ブラウザーの使用

[コントラクト型ブラウザー] の使用

クレームの複数認証を使用する

Project Server ユーザーの認証は、Windows 認証によるものかフォーム認証によるものかに関係なく、SharePoint のクレームの処理によって行われます。複数認証とは、Project Web App が準備される Web アプリケーションで Windows 認証とフォーム ベース認証の両方がサポートされることを意味します。その場合は、Windows 認証を使用する WCF または ASMX サービスのすべての呼び出しが以下のエラーによって失敗します。クレームの処理では、どちらの種類のユーザーを認証するのかを決定できないためです。

The server was unable to process the request due to an internal error. 
For more information about the error, either turn on Include ExceptionDetailInFaults 
(either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) 
on the server in order to send the exception information back to the client, 
or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation 
and inspect the server trace logs.

WCF のこの問題を修正するには、PSI メソッドのすべての呼び出しをそれぞれの PSI サービスに対して定義される OperationContextScope 内に置く必要があります。ただし、複数のサービスに対するスコープを入れ子にしないでください。たとえば、Resource サービスと Project サービスを使用する際には、それぞれの呼び出しセットを各自のスコープ内に置く必要があります。

以下の例では、アプリケーションのどの OperationContextScope セクションからでも DisableFormsAuth メソッドを呼び出せます。このメソッドは、isWindowsAuth パラメーターが false の場合にフォーム認証を開始できるように、以前にフォーム認証を無効にした任意のヘッダー値を削除します。isWindowsAuth が true の場合は、DisableFormsAuth メソッドによってフォーム認証が無効化されます。

WcfSample メソッド内の projectClient オブジェクトは、PSI の SvcProject.ProjectClient クラスのインスタンスです。

// Class variable that determines whether to disable Forms authentication.
private bool isWindowsUser = true;

public void DisableFormsAuth(bool isWindowsAuth)
{
    WebOperationContext.Current.OutgoingRequest.Headers.Remove(
        "X-FORMS_BASED_AUTH_ACCEPTED");

    if (isWindowsAuth)
    {
        // Disable Forms authentication, to enable Windows authentication.
        WebOperationContext.Current.OutgoingRequest.Headers.Add(
            "X-FORMS_BASED_AUTH_ACCEPTED", "f");
    }
}

private void WcfSample()
{
    // Limit the scope of WCF calls to the client channel. 
    using (OperationContextScope scope = new OperationContextScope(projectClient.InnerChannel))
    {
        // Add a Web request header to enable Windows authentication in 
        // multi-authentication installations.
        DisableFormsAuth(isWindowsUser);

        // Add calls to the projectClient methods here:
        // . . .
    }
}

注意

OperationContextScope 内での PSI 呼び出しが必要になるのは、複数認証の環境で動作するアプリケーションのみです。Project Server で Windows 認証のみを使用する場合、スコープの設定や、フォーム認証を無効にする Web 要求ヘッダーの追加は不要です。

ASMX ベースのアプリケーションの場合は、修正方法が異なります。詳細については、「ASMX ベースのコード サンプルの前提条件」のセクション「クレームの複数認証を使用する」を参照してください。

複数認証を使用する完全なコード サンプルについては、Project 2010 SDK ダウンロードの Samples\MultiAuthentication\WCFLogon_MultiAuth サブディレクトリを参照してください。

一般的な定数の値を変更する

ほとんどのサンプルには、そのサンプルを環境で適切に動作させるために更新が必要な変数が 1 つ以上あります。以下の例では、SSL がインストールされている場合、HTTP プロトコルではなく HTTPS プロトコルを使用します。ServerName の部分は、使用するサーバーの名前に置き換えます。ProjectServerName の部分は、プロジェクト サーバー サイトの仮想ディレクトリ名 (例: 「PWA」) に置き換えます。

const string PROJECT_SERVER_URI = "https://ServerName/ProjectServerName/";

ほかに変更が必要な変数があれば、コード サンプルの上部に記載されています。

結果を確認する

コード サンプルの結果の取得と解釈は、必ずしも簡単ではありません。たとえば、プロジェクトを作成する場合は、そのプロジェクトを公開しないと Project Web App の [プロジェクト センター] ページに表示できません。

コード サンプルの結果は、いくつかの方法で確認できます。たとえば、次のような方法があります。

  • Microsoft Project Professional 2010 クライアントを使用して Project Server コンピューターからプロジェクトを開き、必要なアイテムを表示します。

  • Project Web App で Queue ログを表示します。サイド リンク バーの [個人用の設定] をクリックし、[自分のキュー ジョブ] (http://<サーバー名>/<プロジェクト サーバー名>/MyJobs.aspx) をクリックします。[表示] ドロップダウン リストでは、ジョブの状態による並べ替えができます。既定の状態は [進行中または失敗した過去 1 週間のジョブ] です。

  • 公開プロジェクトを Project Web App の [プロジェクト センター] ページに表示します (http://<サーバー名>/<プロジェクト サーバー名>/projects.aspx)。

  • Project Web App の [サーバー設定] ページを使用してすべてのキューおよびエンタープライズ オブジェクトを表示します (http://<サーバー名>/<プロジェクト サーバー名>/_layouts/pwa/admin/admin.aspx)。[サーバー設定] ページへのアクセスには、管理権限が必要です。

  • Microsoft SQL Server Management Studio を使用して、Project Server データベースのテーブルにクエリを実行します。たとえば、以下のクエリを使用して、MSP_WORKFLOW_STAGE_PDPS テーブルの先頭 200 行を選択し、ワークフロー ステージのプロジェクト詳細ページ (PDP) に関する情報を表示します。

    SELECT TOP 200 [STAGE_UID]
          ,[PDP_UID]
          ,[PDP_NAME]
          ,[PDP_POSITION]
          ,[PDP_ID]
          ,[PDP_STAGE_DESCRIPTION]
          ,[PDP_REQUIRES_ATTENTION]
      FROM [ProjectServer_Published].[dbo].[MSP_WORKFLOW_STAGE_PDPS]
    

クリーンアップする

いくつかのコード サンプルをテストすると、エンタープライズ オブジェクトおよび設定の削除や再設定が必要になります。Project Web App の [サーバー設定] ページを使用すると、エンタープライズ データを管理できます (http://<サーバー名>/<プロジェクト サーバー名>/_layouts/pwa/admin/admin.aspx)。[サーバー設定] ページ上のリンクを使用して、古いアイテムの削除、プロジェクトの強制チェックイン、すべてのユーザーのジョブ キューの管理、およびその他の管理タスクの実行が行えます。

以下に、コード サンプル実行後の一般的なクリーンアップ作業で使用する、[サーバー設定] ページ上のリンクの一部を示します。

  • エンタープライズ オブジェクトの強制チェックイン

  • サーバー側のイベント ハンドラー

  • キュー ジョブの管理

  • エンタープライズ ユーザー設定フィールドと参照テーブル

  • エンタープライズ オブジェクトの削除

  • エンタープライズ プロジェクトの種類

  • ワークフロー フェーズ

  • ワークフロー ステージ

  • プロジェクト詳細ページ

関連項目

タスク

[ウォークスルー] WCF を使用して PSI アプリケーションを開発する

[方法] WCF による偽装を使用する

[方法] WCF サービスのプロキシ アセンブリを作成する

概念

WCF と PSI の概要

ASMX ベースのコード サンプルの前提条件

PSI リファレンスの概要

その他のリソース

SharePoint 開発者向け技術情報