次の方法で共有


WCF と PSI の概要

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

Microsoft Project Server 2010 の Project Server Interface (PSI) には、ASMX Web サービス インターフェイスと、Windows Communication Foundation (WCF) 用のサービス インターフェイスの両方が含まれます。パブリック PSI サービスの場合、ASMX Web サービスのオブジェクト モデルと、WCF サービスのオブジェクト モデルは同じです。WCF インターフェイスのサービス指向のアーキテクチャでは、向上したパフォーマンス、セキュリティ、および拡張性が提供されます。PSI を使用するカスタム アプリケーションは、どちらのインターフェイスも使用できます。

この記事は次のセクションで構成されます。

  • WCF の概要

    • PSI でのサービス

    • ASMX および WCF インターフェイスの使用

  • カスタム ソリューションの移行と互換性

重要

Project Server 2010 ではネットワーク通信の基礎となるテクノロジは WCF に基づいており、サービス参照 (.svc ファイル) および広範な機能の向上を使用できます。ASMX Web サービス参照も WCF アーキテクチャに基づいており, .asmx ファイルは使用しません。Project Server 2010 で PSI Web サービスに対する参照を設定するには、?wsdl URL オプションをパスの後に追加する必要があります。たとえば、https://ServerName/ProjectServerName/_vti_bin/PSI/Resource.asmx?wsdl のようになります。

サービス参照の設定手順、サービス構成ファイルの作成方法、PSI に対する Intellisense の説明の使用についてのヒントなど、WCF インターフェイスでの開発で使用する一般的な手順については、「WCF ベースのコード サンプルの前提条件」を参照してください。ASMX インターフェイスで使用する一般的な手順については、「ASMX ベースのコード サンプルの前提条件」を参照してください。

WCF の概要

WCF は、Microsoft .NET Framework 3.0 で Windows Presentation Foundation (WPF) および Windows Workflow Foundation (WF) と共にリリースされた分散メッセージング プラットホームです。WCF は、すべての種類のサービスに対して既定で WSDL および SOAP を使用します。RSS を使用する簡単な XML など、他のメッセージ形式および検出メカニズムを使用するように、構成または拡張できます。WCF は、HTTP、TCP、名前付きパイプ、MSMQ、カスタム プロトコルなど、さまざまな通信プロトコルを使用して動作できます。WCF サービスは、再コンパイルしなくても、複数のプロトコルで公開および使用できます。既定では、Project Server 2010 の WCF サービスは HTTP (または HTTPS) 上の SOAP を使用し、Microsoft インターネット インフォメーション サービス (IIS) でホストされます。

WCF は、マイクロソフトの複数の分散コンピューティング技術 (ASMX, .NET Framework リモート処理、Enterprise Services、WSE、および MSMQ) を統合し、他の Web サービス プラットフォームやメッセージング技術と相互運用することもできます。このように非常に幅広い相互運用性を備えているため、WCF には理解する必要のある機能が多くあります。WCF の構成は、プログラムで行うことも、app.config または web.config XML ファイルを使用して行うこともできます。

Project Server 2010 で PSI と共に WCF を使用することは通常のアプリケーションで ASMX を使用するのと似ていますが、WCF エンドポイントの場合の方がより多くの構成設定を行います。WCF エンドポイントには、URI およびセキュリティ、プロトコル、メッセージ エンコーディング、タイムアウトを指定するバインドが含まれます。

WCF の詳細については、「Windows Communication Foundation」および「Beginner's Guide to Windows Communication Foundation」を参照してください。

PSI でのサービス

クラス、メンバー、およびメソッドのシグネチャは、ASMX インターフェイスと WCF インターフェイスで同じです。表 1 は PSI でのサービスです。ASMX の列ではサービスが .asmx 拡張子付きで示されていますが、実際の URL には ?wsdl URL オプションを含める必要があります。たとえば、Admin.asmx?wsdl などです。

表 1. PSI でのサービス

ASMX

WCF

パブリック

ローカル

備考

Admin.asmx

Admin.svc

   X

   X

 

Archive.asmx

Archive.svc

   X

   X

 

authentication.asmx

 

   X

内部の使用のみに限ります。

Calendar.asmx

Calendar.svc

   X

   X

 

CubeAdmin.asmx

CubeAdmin.svc

   X

   X

 

CustomFields.asmx

CustomFields.svc

   X

   X

 

Driver.asmx

Driver.svc

   X

   X

Project Server 2010 の新しいサービス。

Events.asmx

Events.svc

   X

   X

 

ExchangeSync.asmx

 

   X

Project Server 2010 の新しいサービス。内部の使用のみに限ります。

LoginForms.asmx

   X

 

Project Server は ASMX ではフォーム ベース認証のみを使用します。WCF はクレーム認証を使用します。

LoginWindows.asmx

 

   X

 

Project Server 2010 が複数認証 (クレームベース認証およびフォームベース認証) を使用する場合に、ASMX ベースのアプリケーションでのみ使用されます。

LookupTable.asmx

LookupTable.svc

   X

   X

 

Notifications.asmx

Notifications.svc

   X

   X

 

ObjectLinkProvider.asmx

ObjectLinkProvider.svc

   X

   X

 

 

P12Upgrade.svc

 

   X

Project Server 2007 からのアップグレードでのみ使用されます。ドキュメントにはありません。

PortfolioAnalyses.asmx

PortfolioAnalyses.svc

   X

   X

Project Server 2010 の新しいサービス。

Project.asmx

Project.svc

   X

   X

 

PWA.asmx

PWA.svc

 

   X

内部の使用のみに限ります。

QueueSystem.asmx

QueueSystem.svc

   X

   X

 

Resource.asmx

Resource.svc

   X

   X

 

ResourcePlan.asmx

ResourcePlan.svc

   X

   X

 

Security.asmx

Security.svc

   X

   X

 

Statusing.asmx

Statusing.svc

   X

   X

 

TimeSheet.asmx

TimeSheet.svc

   X

   X

 

View.asmx

View.svc

 

   X

内部の使用のみに限ります。

WinProj.asmx

WinProj.svc

 

   X

内部の使用のみに限ります。

Workflow.asmx

Workflow.svc

   X

   X

Project Server 2010 の新しいサービス。

WssInterop.asmx

WssInterop.svc

   X

   X

 

PSI には、22 個のパブリック Web サービスと 5 個のプライベート Web サービスが含まれます。表 1 では、プライベート Web サービスには "内部の使用のみに限ります" と記されています。Project Server 2007 の場合と同様に、パブリック インターフェイスは Project Web App URL を通して外部アプリケーションから使用できます。外部アプリケーションは ASMX インターフェイスを直接使用できます。外部アプリケーションは、Project Web App のフロントエンドの ProjectServer.svc サービスを通して WCF インターフェイスを使用します。このサービスは、バックエンドの Project Server サービスに対するルーターとして機能します。各 PSI サービスの概要については、「PSI リファレンスの概要」を参照してください。

ASMX および WCF インターフェイスの使用

ASMX インターフェイス:   ASMX インターフェイスは、フロントエンド (Project Web App) の URL を通してのみ使用できます。たとえば、Resource Web サービスのパブリック ASMX インターフェイスの URL は https://ServerName/ProjectServerName/_vti_bin/PSI/Resource.asmx?wsdl です。この URL では、Resource Web サービスの XML サービス コントラクトが表示されます (図 1)。

ASMX インターフェイスのファイルは、Project Server コンピューターの [ProgramFiles]\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\PSI ディレクトリにあります。Project Server 2007 とは異なり、Project Server 2010 の ASMX インターフェイスは、基になっている WCF インフラストラクチャを使用しており, .asmx ファイルを介してはアクセスしません。代わりに、各 PSI サービスの ASMX インターフェイスには、2 つの .aspx ファイルが含まれます。探索ファイル (Servicedisco.aspx) はサービスの要求と応答に対する SOAP バインドを設定し、WSDL ファイル (Servicewsdl.aspx) はサービスのスキーマを提供します。たとえば、Resource サービスへの ASMX アクセスは、Resourcedisco.aspx ファイルと Resourcewsdl.aspx ファイルを使用します。

図 1. WSDL オプションでの ASMX Web サービスの追加

WSDL オプションを指定した ASMX 参照の追加

WCF インターフェイス:   WCF インターフェイスには、[Program Files]\Microsoft Office Servers\14.0\WebServices\Shared\ProjectServer\PSI ディレクトリ内の .svc ファイルが含まれます。PSI の Project サービスの WCF インターフェイスの URL は、たとえば https://ServerName:32843/[GUID]/PSI/Project.svc のようになります。GUID は、SharePoint Web Service アプリケーションでの Project Server Service 仮想ディレクトリの名前です。WCF インターフェイスは、プロキシ アセンブリ ファイルまたはプロキシ ソース ファイルを介してローカル アプリケーションとリモート アプリケーションの両方で使用できます。サーバー上で実行されるように設計されているアプリケーションおよびコンポーネントは、WCF インターフェイスを使用する必要があります。

Project Server Service アプリケーションの仮想ディレクトリ名は、SharePoint サーバーの全体管理を使用して確認できます。[サービス アプリケーションの管理] ページで、目的の Project Server Service アプリケーション インスタンスをクリックします。[Project Web App サイトの管理] ページの URL オプションに、ディレクトリ名の GUID が含まれています。たとえば、https://ServerName:38312/_admin/managepwa.aspx?appid=c476f85e-5c61-4de9-91e3-45e5127e20dc の場合、Project Server Service アプリケーション ディレクトリは c476f85e5c614de991e345e5127e20dc (ダッシュは含まない) です。

ヒント

Project Server Service アプリケーションの GUID を簡単に検索するには、SharePoint Server 2010 でインストールされる Windows PowerShell コマンドを使用します。[スタート] メニューをクリックし、[すべてのプログラム] をクリックします。次に、[Microsoft SharePoint 2010 製品] をクリックして、[SharePoint 2010 管理シェル] をクリックします。以下のコマンドと結果は、[SharePoint 2010 管理シェル] ウィンドウで定義済みのサービス アプリケーションに対して実行した場合のものです (GUID は環境によって異なります)。Project Server Service アプリケーションの 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

この例の Project Server Service アプリケーションの仮想ディレクトリ名は c476f85e5c614de991e345e5127e20dc (ダッシュなし) なので、Project サービスのバックエンド URL は https://ServerName:32843/c476f85e5c614de991e345e5127e20dc/PSI/Project.svc となります。ただし、Project Server サービスのバックエンド URL は、SharePoint Web Service アプリケーションのクレーム ベース認証とカスタム WCF バインドのため、そのままでは使用できません。そのため、WCF サービスへのアクセスは、Project Web App のフロントエンド ProjectServer.svc ルーター経由で行います。カスタム バインドの詳細については、「[方法] WCF サービスのプロキシ アセンブリを作成する」を参照してください。

各 .svc ファイルには、Project Server の WCF 実装に対する参照が含まれます。Project サービスの Project.svc ファイルの内容は次のとおりです。

<%@ ServiceHost=""
Language="C#"
Service="Microsoft.Office.Project.Server.Wcf.Implementation.ProjectImpl,
  Microsoft.Office.Project.Server.Communications.Internal, 
  Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"
Factory="Microsoft.Office.Project.Server.Administration.PsiServiceHostFactory,
  Microsoft.Office.Project.Server.Administration,
  Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"
%>

ProjectServer.svc ルーターの使用:   Project Web App のフロントエンドには 1 つの WCF サービス ProjectServer.svc が含まれ、SharePoint Web サービス アプリケーションで利用可能なすべての Project Server サービスへのルーターとして機能します。外部アプリケーションは、ProjectServer.svc を直接呼び出さず、プロキシ PSI サービスのエンドポイントとして設定します。

注意

Project Server 2010 では、Project Web App に対する Project Server サービス ([Program Files]\Common Files\Microsoft Shared\Web Server Extensions\14\isapi\PSI\ProjectServer.svc) は、Project Server を実行しているコンピューター上の PSI サービスへの外部アクセスに対するルーターとしてのみ機能します。したがって、ProjectServer.svc はメタデータの発行に対しては無効になります。Internet Explorer で https://ServerName/ProjectServerName/_vti_bin/psi/ProjectServer.svc を表示しようとすると、"Web ページがみつかりません" というエラーになります。これは正常な動作であり、ProjectServer.svc に対してはメタデータの発行を有効にしないでください。

図 2 は、Windows Server 2008 の [インターネット インフォメーション サービス (IIS) マネージャー] ダイアログ ボックスでの、PIS サービスのすべての WCF インターフェイスの場所を示しています。この例では、Project Web App の URL が [Sharepoint-80] サイトの https://server/pwa であり、Project Server 2007 の場合と同じように、_vti_bin/PSI サブディレクトリがあります。

図 2. IIS マネージャーでの PSI サービスの場所

IIS マネージャー内での PSI Web サービスの位置

SharePoint Server 2010 では、サービス アプリケーションが SharePoint Web Services アプリケーションにインストールされます。IIS マネージャーを使用して、サイトのトランスポート バインドを検索できます。既定のバインドは、HTTP に対してはポート 32843 で、HTTPS に対してはポート 32844 です。Project Server サービスの仮想ディレクトリ名は GUID です。したがって、Resource サービスの WCF インターフェイスの一般的な URI は、https://ServerName:32843/[GUID]/PSI/Resource.svc です。Microsoft Internet Explorer では、PSI ディレクトリにある web.config ファイルを一時的に変更しない限り WCF サービス コントラクトに直接アクセスできません。

注意

Visual Studio の WCF サービスへの参照 (たとえば https://ServerName:32843/1712e91aeb884cdfb437299b89de3443/psi/Resource.svc) を設定しようとすると、System.InvalidOperationException エラーが発生します。

サービス参照を Visual Studio 内に直接設定するには、C:\Program Files\Microsoft Office Servers\14.0\WebServices\Shared\ProjectServer\PSI でバックエンド Project Server サービスに対する web.config ファイルを一時的に変更する必要があります。方法については、「[方法] WCF サービスのプロキシ アセンブリを作成する」を参照してください。

バックエンド Project Server サービスに対する web.config ファイルを変更しないでサービス参照を設定しようとすると発生するエラーを次に示します。

The service encountered an error. 
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: 
System.InvalidOperationException: An exception was thrown in a call to a policy export extension. 
Extension: System.ServiceModel.Channels.TransportSecurityBindingElement
Error: Security policy export failed.

アプリケーション内の PSI の WCF インターフェイスに呼び出しをルーティングするために ProjectServer.svc を使用するには、以下の操作を実行する必要があります。

  1. 必要な PSI サービスに対する参照を追加します。「WCF ベースのコード サンプルの前提条件」で説明されているように、サービス参照を追加するには 3 つの方法があります。

    • PSI プロキシ アセンブリ ProjectServerServices.dll への参照を設定します。

    • WCF 参照の SvcUtil.exe 出力ファイルを Visual Studio ソリューションに追加します。

    • Visual Studio を使用してサービス参照を追加します。

    サービス参照を直接設定する代わりに、ProjectServerServices.dll プロキシ アセンブリへの参照を設定するか、プロキシ ソース ファイルを Visual Studio ソリューションに追加することをお勧めします。こうしたプロキシ アセンブリとソース ファイルは、Project 2010 SDK ダウンロードに含まれています。

  2. Project Web App フロントエンド上の ProjectServer.svc を指している、サービスのエンドポイントを作成します。Project Server サービスの WCF エンドポイントを作成する方法については、「[ウォークスルー] WCF を使用して PSI アプリケーションを開発する」を参照してください。app.config ファイルを使用せずにプログラムで WCF バインドおよびエンドポイントを作成する方法や、Visual Studio の WCF サービス構成エディターを使用して app.config ファイルを変更する方法も示されています。

カスタム ソリューションの移行と互換性

Project Server 2007 と Project Server 2010 の両方で発生する PSI のパブリック Web メソッドは、シグネチャが同じです。Project Server 2010 の ASMX および WCF パブリック インターフェイスでは、クラスとメンバーが同一です。ただし、PSI メソッドで使用されたり返されたりするデータベースの列の数とサイズは、Project Server 2007 と Project Server 2010 で異なる場合があります。また、レポート データベースにも違いがあります。

Project Server 2007 のソリューションがフロントエンド Project Web App の URL を介して ASMX インターフェイスを使用している場合は、そのまま ASMX インターフェイスの使用を続けることができます。Project Server 2007 のソリューションが共有サービス プロバイダー (SSP) を介して ASMX を使用している場合は、WCF インターフェイスを使用するように変更する必要があります。可能であれば WCF インターフェイスを使用することをお勧めします。そのほうが、サービス指向アーキテクチャ、セキュリティ、パフォーマンス、および拡張性の点で有利です。

Project Web App の [互換モード] 設定は、Project Server 2010 と Project Professional 2007 の互換性を有効にすることのみを意味します。サードパーティのソリューションには何の効果もありません。

注意

Project Server 2007 用に開発されたたいていのソリューションは Project Server 2010 で動作するはずですが、運用サーバーに展開する前に、Project Server 2010 の非運用インストールでソリューションをテストすることをお勧めします。

Project Server 2007 のソリューションを、WCF インターフェイスを使用するように移行する場合、またはソリューションが Project Server 2010 で意図したとおりに動作しない場合は、少なくとも次のことを行う必要があります。

  • Web 参照と名前空間名の一覧を作成し、ASMX Web 参照を削除します。

  • 同じ名前空間名を使用して、WCF プロキシ アセンブリ ProjectServerServices.dll または必要なサービスのソース ファイルを追加するか、あるいはフロントエンド ASMX 参照を再び追加します。Project Server 2010 の PSI サービスには、新しいメソッドとデータセットがいくつかあります。

  • Microsoft.Office.Project.Server.Library.dll、Microsoft.Office.Project.Server.Events.Receivers.dll などの Project Server 2010 アセンブリを使用するように、アセンブリ参照を変更します。

  • ソリューションをコンパイルしてテストします。

WCF インターフェイスを使用するためにソリューションを更新するには、Visual Studio 2008 SP1 以降を使用する必要があります。リリース版の Project Server 2010 では、Project Server ワークフローを作成して展開するのに Microsoft Visual Studio 2010 が必要です。

アプリケーションまたはコンポーネントを更新するときは、Visual Studio のアプリケーションのプロパティ ページで、[ターゲット フレームワーク] を特定のバージョンの .NET Framework に設定できます。ターゲット フレームワークが .NET Framework 2.0 の場合は、ASMX を使用してのみ Web 参照を更新および新規追加できます。ターゲット フレームワークを .NET Framework 3.5 に設定した場合は、WCF サービスの [サービス参照の追加] ダイアログ ボックスにアクセスできます。

重要

プレリリース版の Project Server 2010 で開発したソリューションやカスタマイズは、再コンパイルが必要があり、さらにリリース版向けの変更が必要になる場合があります。

関連項目

タスク

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

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

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

概念

PSI リファレンスの概要

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

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

その他のリソース

Windows Communication Foundation

Beginner's Guide to Windows Communication Foundation