次の方法で共有


プロジェクト内のWCFベースコードサンプルの前提条件

Project Server Interface (PSI) リファレンス トピックに含まれている WCF ベースのコード サンプルを使用して、Visual Studio でプロジェクトを作成するのに役立つ情報について説明します。

Project Server 2013 クラス ライブラリと Web サービス リファレンスに含まれる WCF ベースのコード サンプルの多くは、もともと Project 2010 開発者向けドキュメント用に作成され、WCF Web サービスの標準形式を使用していました。 サンプルは Project Server 2013 で引き続き機能し、コンソール アプリケーションにコピーして完全なユニットとして実行するように設計されています。 例外はサンプルに記載されています。

Office Project Server 2007 用に開発されたサンプルとは変わらない Project 2013 開発者向けドキュメントのコード サンプルでは、ASMX Web サービスが使用されます。 この ASMX ベースのサンプルは、WCF サービスを使用するように調整することもできます。 この記事では、このサンプルを WCF サービスで使用する方法を説明します。 ASMX Web サービスでサンプルを使用する方法については、「 Project での ASMX ベースのコード サンプルの前提条件」を参照してください。

注:

クライアント側オブジェクト モデル (CSOM) にアプリケーションで必要なメソッドが含まれている場合は、CSOM を使用して新しいアプリケーションを開発する必要があります。 CSOM を使用すると、アプリケーションは、Project Onlineまたは Project Server 2013 のオンプレミス インストールで動作できます。 それ以外の場合、アプリケーションで PSI を使用する場合は、ネットワーク通信に推奨されるテクノロジである WCF インターフェイスを使用する必要があります。 ASMX インターフェイスまたは WCF インターフェイスを使用するアプリケーションは、Project Server 2013 のオンプレミス インストールでのみ機能します。

CSOM の詳細については、「 Project Server 2013 アーキテクチャ」および「Project 2013のクライアント側オブジェクト モデル (CSOM)」を参照してください。

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

開発環境を設定する

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

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

    注:

    サーバーの有効なユーザーであり、アプリケーションで使用する PSI 呼び出しのための十分な権限を持っていることを確認します。 それぞれの PSI メソッドに関する開発者向けドキュメントのトピックには、Project Server 権限の表があります。 たとえば、 Project.QueueCreateProject メソッドには、グローバル な NewProject アクセス許可と SaveProjectTemplate アクセス許可が必要です。

    場合によっては、サーバーでのリモート デバッグが必要になることがあります。 また、SharePoint ファーム内の各 Project Server コンピューターにイベント ハンドラー アセンブリをインストールし、SharePoint サーバーの全体管理の [アプリケーションの全般設定] ページの [プロジェクト サーバーの設定] ページを使用して、Project Web App インスタンスのイベント ハンドラーを構成することで、イベント ハンドラーを設定する必要がある場合もあります。

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

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

    1. 適切なバージョンの Visual Studio をインストールする。 記載されている場合を除き、コード サンプルは Visual C# で記述されています。 これらは、Visual Studio 2010 または Visual Studio 2012 で使用できます。 最新のサービス パックがインストールされていることを確認してください。

    2. Project Server の DLL を開発用コンピューターにコピーする。 Project Server コンピューター上から [Program Files]\Microsoft Office Servers\15.0\Bin 開発用コンピューターに次のアセンブリをコピーします。

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

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

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

  3. IntelliSense ファイルをインストールする。

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

    PSI サービスの IntelliSense の説明では、Project 2013 SDK ダウンロードのサブディレクトリにある CompileWCFProxyAssembly.cmd スクリプトを Documentation\IntelliSense\WCF 使用して PSI プロキシ アセンブリを作成する必要があります。 このスクリプトを実行すると、WCF ベースの ProjectServerServices.dll プロキシ アセンブリが作成されます。 詳細については、SDK ダウンロードに含まれる [ReadMe_IntelliSense].mht ファイルを参照してください。

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

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

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

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

    ソリューション エクスプローラーで、System.ServiceModel への参照を追加します (図 1 を参照)。 Web アプリケーションの場合は、System.ServiceModel.Web を使用します。

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

    図 1. Visual Studio での WCF ベースのアプリケーションへの参照の追加

    WCF の参照の追加 WCF

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

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

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

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

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

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

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

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

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

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

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

注:

Source.zip ファイルからプロキシ ソース ファイルを抽出すると、フォルダー内 Documentation\IntelliSense\WCF\Source のファイルは Project 2013 SDK ダウンロードの発行日の時点で最新の状態になります。 更新された PSI プロキシ ソース ファイルを生成するには、Project Server コンピューターで GenASMXProxyAssembly.cmd スクリプトを実行します。 詳細については、「サービス参照を追加する」を参照してください。

フォルダー内の Documentation\IntelliSense\ASMX スクリプトは、WCF ベースのアプリケーションでは機能しません。 GenASMXProxyAssembly.cmd スクリプトは Wsdl.exe を呼び出し、ASMX サービスのソース コード ファイルを生成します。 ASMX プロキシ ファイルには、さまざまなクラスとプロパティが含まれています。 たとえば、ASMX ベースの Resource Web サービスには Resource クラスが含まれますが、WCF ベースのリソース サービスには Resource インターフェイス、 ResourceChannel インターフェイス、 ResourceClient クラスが含まれます。

ASMX Web サービスと WCF サービスの両方に対して作成された任意の名前空間は同じであるため、IntelliSense の ProjectServerServices.xml ファイルはどちらのアセンブリでも動作します。 たとえば、WCF ベースのプロキシ アセンブリと ASMX ベースのプロキシ アセンブリ内の Resource サービスの名前空間は SvcResource です。 もちろん、名前空間名は、プロキシ アセンブリと ProjectServerServices.xml IntelliSense ファイルで一致するように変更できます。

あるコード サンプルが PSI サービスの名前空間に別の名前 (ProjectWebSvc など) を使用している場合、IntelliSense が動作するためには、SvcProject を使用するようにそのサンプルを変更して、名前空間とプロキシ アセンブリを一致させる必要があります。

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

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

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

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

図 2. Resource サービスのメソッドに対する IntelliSense の使用

ReadResource メソッドに Intellisense を使用する

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

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

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

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

private static SvcResource.ResourceClient resourceClient;
. . .
private static void SetClientEndpoints()
{
  resourceClient = new SvcResource.ResourceClient("basicHttp_Resource");
  . . .
}
public void DisposeClients()
{
  resourceClient.Close();
  . . .
}

注:

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

サービス参照の追加

WCF ベースのプロキシ アセンブリを使用したり、PSI サービスのプロキシ ファイルを追加したりしない場合は、1 つ以上のサービス参照を Visual Studio 内で直接設定できます。 次の手順の手順 1 を使用して、更新されたプロキシ ファイルを作成し、Project 2013 SDK のダウンロードに含まれるスクリプトを準備 Documentation\IntelliSense\WCF\GenWCFProxyAssembly.cmd することもできます。

注:

サービス参照を設定するには、Project Server コンピューターで Visual Studio を使用する必要があります。 Visual Studio 内でサービス参照を直接追加するよりも、ProjectServerServices.dll プロキシ アセンブリを使用するか、プロキシ ソース ファイルを追加することをお勧めします。

次の手順では、Project Server のテスト インストールを実行しているコンピューターで Visual Studio 2012 を使用してサービス参照を設定する方法を示します。

  1. バックエンド WCF サービスへのアクセスを取得するには、Project Server コンピューターで Visual Studio を実行します。

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

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

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

    • ブラウザーで SharePoint 2013 サーバーの全体管理アプリケーションを開きます。 [サービス アプリケーションの管理] をクリックし、目的の Project Server PSI Service アプリケーションをクリックします。 たとえば、[ProjectServerService] をクリックします。 [Project Web Appサイトの管理] ページの URL には、仮想ディレクトリ名が含まれています。 たとえば、 では https://ServerName:8080/_admin/pwa/managepwa.aspx?appid=534c37eb-00d7-4ccf-adce-cf9827e95239、仮想ディレクトリ名は です 534c37eb00d74ccfadcecf9827e95239 (ディレクトリ名にダッシュが含まれています)。

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

      注:

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

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

          PS > get-SPServiceApplication
          DisplayName          TypeName             Id
          -----------          --------             --
          State Service        State Service        04041cfa-4ab3-4473-8bc8-3967b02eff39
          ProjectServerSer...  Project Server PS... 534c37eb-00d7-4ccf-adce-cf9827e95239
          Security Token Se... Security Token Se... 7243732e-edea-405d-8cc8-1716b99faef5
          Application Disco... Application Disco... 3bfbdeb0-bc20-4a21-801c-cc6f1ce6c643
          SharePoint Server... SharePoint Server... 09912f49-3b72-462f-a44c-6533b578286a  
      

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

      PS > $projectService = "ProjectServerService"
      PS > (get-SPServiceApplication -Name $projectService).Id
      Guid
      ----
      534c37eb-00d7-4ccf-adce-cf9827e95239
      

      注:

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

    などの https://localhost:32843/534c37eb00d74ccfadcecf9827e95239/PSI/Resource.svc URL は、Project Server サービスの標準です。

  4. サービス参照の解決後、[名前空間] テキスト ボックスに参照名を入力します。 Project 2013 開発者向けドキュメントのコード例では、任意の名前空間名 Svc ServiceName を使用します。 たとえば、このコード サンプルの Resource サービスは SvcResource という名前になっています。

    図 3. WCF ベースの Resource サービス参照の追加

    WCF ベースのリソース サービス参照の追加

  5. Project Service ディレクトリ内の一時 web.config ファイルを元のファイル (web.config に名前を変更) に置き換えてから、 を再実行します iisreset

その他の参照を設定する

Project Server アプリケーションでは、多くの場合、SharePoint 2013 Web サービスなどの他のサービスが使用されます。 ほかのサービスや参照が必要な場合は、コード サンプルにそれらが記されています。

コード サンプルのローカル参照は、サンプルの上部の 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 2013 SDK のダウンロードには、 のサンプル output.config ファイルが Documentation\IntelliSense\WCF\Source.zip含まれています。 たとえば、Resource サービス用に作成 SvcUtil.exe 既定の output.config ファイルには、 BasicHttpBinding_Resource と BasicHttpBinding_Resource1 という名前の 2 つのバインド が含まれていますclient 要素には、2 つの既定のエンドポイントが含まれています。 1 つのエンドポイントは、ポート 32843 の HTTP アドレスへのセキュリティで保護されたアクセス用であり、もう 1 つは、次のようにポート 32843 での通常のアクセス用です。

<client>
    <endpoint address="https://ServerName.domain:32843/GUID/PSI/Resource.svc/secure"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource" />
address="https://ServerName.domain:32843/GUID/PSI/Resource.svc"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Resource1"
        contract="SvcResource.Resource" name="BasicHttpBinding_Resource1" />
</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="https://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. クライアント エンドポイント アドレスをサーバーとインスタンスの名前に置き換Project Web AppServerName/ProjectServerName

  4. を、リソースなどの PSI サービスの名前に置き換えます ServiceName 。 たとえば、次のようにサービス名の 3 つのインスタンスすべてを確実に置き換えてください。

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

    注:

    アプリケーションの実行時に、サーバーがビジー状態である、または HTTP 要求が許可されていないことを示すエラーが表示される場合は、app.config ファイルのエンドポイント アドレスが正しいことを確認してください。

        <client>
        <endpoint address="https://ServerName/pwa/_vti_bin/PSI/ProjectServer.svc"
            behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
            bindingConfiguration="basicHttpConf" 
            contract="SvcProject.Project"
            name="basicHttp_Project" />
        <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 ファイルを編集できます。 図 4 は、[Microsoft サービス構成エディター] ダイアログ ボックスで contract 要素を設定する方法を示します。 ソリューションで PSI プロキシ アセンブリを使用している場合は、Visual Studio ソリューションの bin\debug ディレクトリで ProjectServerServices.dll を開きます。 [コントラクト型ブラウザー] ダイアログ ボックスに、WCF サービス コントラクトのすべてが表示されます (図 5 を参照)。

図 4. WCF サービス構成エディターの使用

WCF サービス構成の使用 エディター

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

図 5. WCF サービス構成エディターでのコントラクト型ブラウザーの使用

コントラクト型ブラウザーを使用

複数の認証を使用する

オンプレミスの Project Server ユーザーの認証は、Windows 認証認証でもフォーム認証でも、SharePoint での要求処理を通じて行われます。 複数認証とは、Project Web Appがプロビジョニングされている Web アプリケーションがWindows 認証とフォーム ベースの認証の両方をサポートすることを意味します。 その場合、要求プロセスで認証するユーザーの種類を判断できないため、Windows 認証を使用する WCF サービスの呼び出しは次のエラーで失敗します。

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 の場合にフォーム認証を開始できるように、以前にフォーム認証を無効にした任意のヘッダー値を削除します。 isWindowsAuthtrue の場合は、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 
        // multiple authentication installations.
        DisableFormsAuth(isWindowsUser);
        // Add calls to the projectClient methods here:
        // . . .
    }
}

注:

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

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

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

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

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

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

結果を確認する

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

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

  • Project Professional 2013 クライアントを使用して Project Server コンピューターからプロジェクトを開き、目的の項目を表示します。

  • Project Web App ( https://ServerName/ProjectServerName/projects.aspx) の [プロジェクト センター] ページで発行されたプロジェクトを表示します。

  • Project Web Appでキュー ログを表示します。 [サーバーの設定] ページを開きます (右上隅にある [設定] アイコンを選択し、[個人用設定] セクション ( https://ServerName/ProjectServerName/MyJobs.aspx) の下にある [キューに入ったジョブ] を選択します。 [表示] ドロップダウン リストでは、ジョブの状態による並べ替えができます。 既定の状態は [進行中または失敗した過去 1 週間のジョブ] です。

  • Project Web App ( https://ServerName/ProjectServerName/_layouts/15/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 [ProjectService].[pub].[MSP_WORKFLOW_STAGE_PDPS]

クリーンアップ

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

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

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

  • キュー ジョブの管理

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

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

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

  • ワークフロー フェーズ

  • ワークフロー ステージ

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

  • タイムシート期間

  • タイムシートの設定および既定値

  • 管理用行の分類

追加の設定は、特定の Project Web App サーバー設定ページではなく、Project Web App インスタンスごとに SharePoint Server 2013 によって管理されます。 SharePoint サーバーの全体管理アプリケーションで、[全般アプリケーションの設定] を選択し、[プロジェクト サーバーの設定] で [管理] を選択し、[サーバー設定] ページのドロップダウン リストでProject Web App インスタンスを選択します。 たとえば、[サーバー側イベント ハンドラー] を選択して、選択したProject Web App インスタンスのイベント ハンドラーを追加または削除します。

関連項目