Microsoft ON ― 出張ワークショップ ― [コース: C2] .NET Framework 3.0 WCF/WF アプリケーション開発 本日の内容 .NET Framework 3.0 新しい開発プラットフォームとしての .NET Framework 3.0 の進化(概要) Windows Communication Foundation (WCF) Windows Workflow Foundation (WF) .NET Framework 3.0 .NET Framework 3.0 新たなビジネスアプリケーションの開発・実行基盤 Windows Presentation Foundation (WPF) Windows Communication Foundation (WCF) Windows Workflow Foundation (WF) .NET Framework 3.0 既存の .NET Framework 2.0 Windows CardSpace (WCS) 新しい開発プラットフォームとしての .NET Framework 3.0 の進化(概要) パラダイムの進化 オブジェクト、コンポーネントからサービス概念の追加 1980sオブジェクト指向 クラスベース 責務の分離、カプセル化 継承、ポリモーフィズム 1990s 2000s コンポーネント指向 インターフェイスベース ランタイム メタデータ ダイナミック ローディング サービス指向 スキーマ・コントラクト (マルチプラットフォーム統合) .NET Framework 3.0 で 可変と不変を区別して実装 サービス指向開発が選択可能 疎結合 ポリシーによるバインディング実装再利用 バイナリ 可変実装 技術 再利用技術 技術 .NET Framework 3.0 における開発の変化 サービス実装採用の際の分析・設計への留意 サービス指向4原則 (by Don Box, Microsoft) 境界は明確であること サービスは自律していること 業務分析 クラスでなく スキーマ/コントラクトを共有すること (要件定義) ポリシーベースの互換性を持つこと システム分析 デメテルの法則 「知らないやつには話しかけない」 システム設計 実装・ 単体テスト 結合テスト ・・・・ A B C D E F A X B X C X X D X X E X X X X Operation Context DSM (The Design Structure Matrix) X X × Operation Context X F G G によるサービス抽出 X ツールの技術だけでは、”サービス指向” の恩恵は手に入らない! (技術 + 方法) WS-* アーキテクチャ .NET Framework 3.0 が参照する OASIS 標準 WS-Management WS-Enumeration Management & Device DP4WS WS-Transfer WS-Security WS-Discovery (Devices Profile for Web Services) WS-Federation WS-Coordination Assurances Metadata WS-Metadata Exchange WS-Security Policy WS-Policy BPEL4WS (Business Process Execution Language for Web Services) WS-Atomic Transaction UDDI 2.0 WS-Secure Conversation WS-Reliable Messaging WS-Business Activity WSDL 1.1 WS-Addressing WS-Eventing WS-Trust MTOM Messaging (Message Transmission Optimization Mechanism) XML Schema Foundation XML 1.0 XML Namespaces XML Infoset 仕様策定・公開 / 標準化中 HTTP HTTPS SOAP 1.1/1.2 標準仕様 新規開発フレームワーク(3.0 WCF/WF) がもたらす その他のメリット WS-* に伴う動作仕様の大幅拡張 XML Web サービスで、ASP.NET認証、独自認証 の組み込みが可能 WebMethod がトランザクションに参画可能 (従来 はルートトランザクション作成のみ) など テスト時などにおける通信実装の切り替え(変 更)が容易 ワークフローエンジンと利用スキルの統一 (SharePoint, BizTalk, など) Windows Communication Foundation (WCF) WCF のビジネスインパクト 通信処理の統一、ビジネスロジックとの分離 ASMX .NET Remoting 異種プラットフォーム との相互運用 位置透過な リモート オブジェクト 属性ベースの プログラミングと オブジェクト コンテナ WS-* プロトコル サポート Enterprise Services メッセージ指向の プログラミング System.Messaging WSE WCF の価値 そのメリット全般 高度にデザインされた通信実装モデルを提供 通信テクノロジーをビジネスロジックと分離 Contract-First デザイン 分散アプリケーション開発の保守性の向上 × チューニング結果に応じた通信方法の 変更容易性や、移行の迅速化、など Web サービス標準に準拠した相互運用性の実現 WS-* 標準仕様のフルサポート 既存のテクノロジとの互換性、コンフィグレーションによる 他プラットフォームとの接続 WCFのデザインコンセプト 処理の基本は “A・B・C” 内部的なサービス内の振る舞いを実装 • • • • クライアント 並列処理、インスタンス化制御 Fault、Exception 処理 偽装、認証、認可 トランザクションの自動参加・投票 etc … サービス Behavior Behavior Endpoint Behavior C B Endpoint A Message A Binding Contract B Endpoint Address Where? How? What? C Behavior WCF のサービス実装 コントラクトとコンフィグレーション サービスコントラクト using System.ServiceModel; [ServiceContract] public interface IProductServiceContract { [OperationContract] Product[] GetProducts(); } データコントラクト [DataContract] public class Product { [DataMember] public int ProductID; [DataMember] public string ProductName; ・・・・ サービスコンフィグレーション <?xml version="1.0" encoding="utf-8" ?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.serviceModel> サービス実装のタイプ情報 Namespace.Class 名 <services> <service type="ProductService.ProductServiceImpl"> <endpoint A address="http://localhost:3000/ProductService/ProductService.svc" B binding="basicHttpBinding" C contract="ProductService.IProductServiceContract, ProductService" /> </service> </services> サービスコントラクトのタイプ情報 コントラクトのアセンブリ名 Namespace.Class 名 </system.serviceModel> WCF のサービス実装 バインディングの種類 標準バインディング セット(要件にマッチしない場合 は CustomBinding を使用) バインディング名 .config 要素 説明 BasicHttpBinding <basicHttpBinding /> WS-I Basic Profile に準拠した相互 運用性の高い Web サービスによる 通信 WsHttpBinding <wsHttpBinding /> WS-* プロトコルを使用した高機能な Web サービスによる通信 WsDualHttpBinding <wsDualHttpBinding /> WS-* プロトコルを使用した高機能な Web サービスによる非同期双方向で の通信 NetTcpBinding <netTcpBinding /> .NET to .NET に最適化された高速マ シン間の通信 NetNamedPipeBinding <netNamedPipeBinding /> .NET to .NET に最適化されたマシン 内プロセス間の最速度通信 NetMsmqBinding <netMsmqBinding /> MSMQ による WCF アプリケーション 間の通信 MsmqIntegrationBinding <msmqIntegrationBinding /> 既存の MSMQ アプリケーションとの 相互接続での通信 WCF のサービス実装 バインディングごとのサポート機能 バインディング 名 通 信 プ ロ ト コ ル 相 互 運 用 性 通 信 区 間 エ ン コ ー デ ィ ン グ セ キ ュ リ テ ィ セ ッ シ ョ ン リ ラ イ ア ビ リ テ ィ ト ラ ン ザ ク シ ョ ン メ パッ セ ター ージ ンン グ BasicHttpBinding HTTTP HTTPS WS-I BP 1.1 BSP 1.0 Crossmachine Text Mixed WsHttpBinding HTTP HTTPS WS-* Crossmachine Text MTOM T|M Mixed D D WsDualHttpBinding HTTP WS-* Crossmachine Text MTOM M D D NetTcpBinding TCP .NET (WCF) Crossmachine Binary Mixed T|M D D NetNamedPipeBinding Named -Pipe .NET (WCF) Crossprocess Binary T NetMsmgBinding MSMQ .NET (WCF) Binary T|M Q Q Simplex MsmqIntegrationBinding MSMQ MSMQ Crossmachine Crossmachine T Q Q Simplex Text Simplex Request -Reply T|M D Simplex Request -Reply Simplex Request -Reply Duplex Simplex Request -Reply Duplex Simplex Request -Reply Duplex WCF のサービス実装 Endpoint の定義 一般には、構成ファイル (.config) で定義(下記) Self ホスティング(後述)でコードで定義することも可能 <system.ServiceModel> <services> <service type="EmployeeService"> <!-- Endpoint の定義 --> <endpoint contract="IEmployeeService" binding="netTcpBinding" bindingConfiguration="SampleBinding" address="http://hoge.com:8888/Employee/" /> </service> </services> <bindings> <netTcpBinding> <binding name="SampleBinding" transactionFlow="true" /> </netTcpBinding> </bindings> </system.ServiceModel> WCF のサービス実装 Behavior の定義 サービスの実装クラスにBehaviorを定義 ServiceBehavior 属性 サービス レベルでの振舞いを定義 OperationBehavior 属性 オペレーション レベルでの振舞いを定義 [ServiceBehavior( TrasactionIsolationLevel = IsolationLevel.Serializable )] public class EmployeeService : IEmployeeService { [OperationBehavior( TransactionAutoComplete = true, TransactionScopeRequired = true )] public void Regist( Employee employee ) { // ... } } WCF のサービス実装 サービスホストによるホスティング(1) ServiceHost クラスを使用する ホスティング可能なアプリケーション形態: スタンドアロン (WPF、WindowsForm、コンソール) NT サービス ASP.NET (IIS 5.1、6.0) ※ HTTP(S) のみサポート WAS (Windows Activation Service: IIS7) ※ HTTP(S)、TCP、MSMQ、Named-Pipe をサポート WCF のサービス実装 サービスホストによるホスティング(2) Self-hosting: // サービス実装クラスの型を指定して、サービス ホストを生成 ServiceHost host = new ServiceHost( typeof( HelloService ) ); // ... (Endpoint の追加処理) // サービス ホストを起動 host.Open(); // ... (中略) // サービス ホストを停止 host.Close(); ASP.NET/WAS-hosting (IIS 5.1/6.0、IIS7): http://localhost/HelloService/HelloService.svc <!-- サービス実装クラスの型を指定 (ServiceHost を自動生成) --> <% @ServiceHost language="C#" class="HelloService" %> WCF のクライアント実装 クライアントチャネルを使用する場合 ChannelFactory<T> クラス サービス コントラクトに対応するクライアント チャネルを生 成するファクトリークラス // サービス コントラクトに対応するクライアント チャネルのファクトリーを生成 // (.config のクライアント用 Endpoint 名を指定) ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>( "SampleEndpoint" ); // ChannelFactory からクライアント チャネルを生成 IMyService mySvc = factory.CreateChannel(); // サービス コントラクトのオペレーションを呼び出す mySvc.Hello( "How are you ?" ); <client> // クライアント チャネルを破棄 ( (IChannel)mySvc ).Close(); <!-- Endpoint の定義 --> <endpoint name="SampleEndpoint" contract="IMyService" binding="netMsmqBinding" address="http://hoge.com/Private/Q" /> </client> WCF のクライアント実装 プロキシを使用する場合 ツールでプロキシを生成可能 SvcUtil.exe (Service Metadata Utility Tool) サービスのメタデータ (WSDL、WS-MEX) から、プ ロキシのコードや構成情報 (.config) を生成 svcutil /config:app.config http://localhost/Employee/EmployeeService.svc?wsdl Visual Studio から「Web 参照」ライクにプロ キシを生成することも可能 WCF のアシュアランス 4つのアシュアランス セキュア (Secure) リライアブル (Reliable) トランザクテッド (Transacted) インターオペラブル (Interoperable) WCF のアシュアランス セキュリティ 機密性、完全性 セキュリティはバインディングの機能 標準的なバインディングはデフォルトでセキュア BasicHttpBinding 以外 アプリケーションデータは暗号化され署名される 認証、認可 X.509 証明書、ユーザーネーム/パスワード、Kerberos、 SAML、カスタム <behaviors> <behavior name = "credentialConfig"> <serviceCredentials> <serviceCertificate storeLocation="LocalMachine" storeName="My" findValue="purchase.com" x509FindType="FindBySubjectDistinguishedName"/> </serviceCredentials> </behavior> </behaviors> WCF のアシュアランス リライアビリティ 信頼できる End-to-End のメッセージングを提供 順序保証(オプショナル) Exactly Once (正確な1回のメッセージ保証、重複メッ セージの排除) WS-ReliableMessaging を使用 <bindings> <wsHttpBinding> <binding name="Binding1"> <reliableSession enabled="true" ordered="true" /> </binding> </wsHttpBinding> </bindings> WCF のアシュアランス トランザクション System.Transactions と連携可能 WS-AT (WS-AtomicTransaction) をサポート MS-DTC が WS-AT、WS-Coordination に対応 [ServiceContract] public interface IMyContract { [OperationContract] [TransactionFlow( TransactionFlowOption.Required )] bool Transfer1( Account from, Account to, decimal amount ); } [ServiceBehavior()] public class MyService : IMyContract { [OperationBehavior( TransactionScopeRequired = true, TransactionAutoComplete = true )] public bool Transfer1(Account from, Account to, decimal amount) { // ... } } WCF のアシュアランス インターオペラビリティ Web サービスによる相互運用性 IETF、W3C、OASIS などの標準化団体による Web サービス標準仕様 (WS-*) の策定 WS-I による Web サービスの相互運用に対する 取り組み Web サービス標準仕様に基づいた相互運用のガ イドラインの作成やテストツールを公開 Basic Profile WS-I Basic Profile 1.0/1.1 WS-I Basic Security Profile 1.0 Windows Workflow Foundation (WF) WF のビジネスインパクト WF の2つの目的 サービス指向 型プロセス管理(統合)の支援 ワークフローのビジュアルなデザインと変更 カスタムアクティビティの開発者とフローの作成者の分離 Windows プラットフォームにおけるワークフロー ソ リューションの テクノロジー統一 すべてのワークフローテクノロジーにおける統一基盤の提 供(Microsoft Office Sharepoint Server 2007, など) システム ワークフロー/ヒューマン ワークフローの双方を 想定 シーケンシャルワークフロー/ステートマシンワークフロー の双方を想定 WFの価値 役割分担の明確化 (適材適所のワークフロー管理) ワークフロー開発 ほぼコードレス、フローの記述 Application Workflows フロー ロジック PDCA型の ビジネスフロー進化 (社員力の活用) カスタム・アクティビティ アクティビティ開発 個別の機能や値評価ロジック等 ホスト開発 アプリケーションサービス&ホスト Runtime Services カスタムサービス WFの価値 統一的ワークフロープラットフォームの提供 ヒューマンワークフロー トランザクション型プロセス コラボレート型プロセス ヒューマン システムワークフロー バッチ システム間連携 活用例:明細書の発行、 ルーチン型データ転送、 etc 活用例: 機関間の料金 請求と決済、サプライ チェーン etc ワークフロー 活用例: 口座開設、 ローン申請、ドキュメン ト承認、etc 状態機械 (データー駆動型) 活用例: 相場連動型 ポートフォリオリスク計 算(自動売買)、etc アクティビティ複雑性 / 流動性レベル WFの構成 ランタイムと標準ライブラリ カスタムデザイナー Visual Studio Workflow デザイナー アクティビティ Structured State Machine Rules アクティビティ フレームワーク Validation Compilation Serialization Transactions Fault Handling ワークフローランタイム ランタイムサービス Loader Persistence カスタム アクティビティ … Visualization Cancellation Scheduling Threads Compensation Instance Mgmt Transactions ホストプロセス (exe, Windows サービス, ASP.NET, etc..) Tracking WF の実装 ワークフロー定義 ワークフローの定義 (XOML) <?Mapping XmlNamespace="Activities" ClrNamespace="System.Workflow.Activities" Assembly="System.Workflow.Activities" ?> <SequentialWorkflow x:Class="MyWorkflow" xmlns="Activities" xmlns:x="Definition"> … </SequentialWorkflow> ワークフローの実行 static void Main(string[] args) { // WorkflowRuntime の作成 WorkflowRuntime workflowRuntime = new WorkflowRuntime(); // workflow の型をロード Type type = typeof(MyWorkflow); // workflow インスタンスの作成/ワークフローの開始 workflowRuntime.StartWorkflow(type); // WorkflowRuntime の終了まで待機 waitHandle.WaitOne(); } ワークフローの実装 カスタムアクティビティの作成 例:メール送信アクティビティ using System.Workflow.ComponentModel; public partial class SendMail : System.Workflow.ComponentModel.Activity { public SendMail() { InitializeComponent(); } protected override Status Execute(ActivityExecutionContext context) { // メール送信の実装をここに記述する return Status.Closed; } } public partial class SendMail { public string subject; public string Subject { get { return subject; } set { this.subject = value; } } private void InitializeComponent() // Designer により生成 { this.ID = "SendMail"; } } 2 種類のワークフロー シーケンシャルワークフロー シーケンシャルワークフ ローは、段階(Step)から 構成される 開始から終了まで、段 階を逐次実行する 段階には、条件分岐、 反復等が含まれる A1 A2 A3 A4 2 種類のワークフロー ステートマシンワークフロー ステート マシン ワー クフローは、「状態(ス テート)」の集合から構 成される S1 S3 S2 所定の状態では、一 組の「イベント」を受信 できる S4 状態「遷移」の境界で 受信したイベントを基 に、「アクション」が実 行される S5 ワークフローライフサイクルの管理 Workflow インスタンスの制御 WorkflowInstance オブジェクトを通して制御 実行中のワークフローとの接点 永続化サービスを用いた自動ロードのインスタンス Auto-loads instance using PersistenceService ライフサイクル管理と永続化の操作 Abort, Terminate, Suspend, Resume Load, Unload オペレーションは WorkflowRuntime イベントに対応 private void TerminateButton_Click(object sender, EventArgs e) { WorkflowInstance workflowInstance = workflowRuntime.GetWorkflow(Program.workflowInstanceId); workflowInstance.Terminate("Terminating Case, Problem was resolved"); } ワークフローライフサイクルの管理 WorkflowRuntime イベント キーコンセプト 2種類のイベント – ワークフローインスタンスとランタイム イベントを処理するハンドラーの定義が必要 ワークフローインスタンスが実行されているスレッドから呼び出される ワークフローインスタンスのライフサイクル ワークフローインスタンスのステータスの変化を管理 Aborted, Terminated, Started, Completed, etc. EventArgs はイベントを発生させたワークフローのワークフローインスタンス IDを含む WorkflowInstance への操作もしくはワークフローの実行を通して引き起こさ れる 例 Terminate アクティビティの実行が WorkflowRuntime.WorkflowTerminated イベントを引き起こす ワークフローランタイムのライフサイクル ワークフローランタイムのステータスの変化を管理 Started, Stopped 例 管理ツールでの制御、アプリケーション/OS のシャットダウン ワークフローインスタンスのライフサイクル インスタンスごとに分離されたマネージスレッド ワークフローインスタンスはホストアプリケーションとは別々 のマネージスレッド上で実行 ・ホストアプリケー ションとは別のマ ネージスレッド上で 動作 ・スレッドプール上で 実行 ワークフローランタイム Workflow Instance InstanceId=25b27c73-c543-4113-acb1-0e458b8ffa54 Workflow Instance InstanceId=a947e517-0b5a-4633-9597-934b61fb1802 ・ホストアプリケー ションとワークフロー インスタンスとの間 でのデータの受け渡 しが必要 ホストアプリケーション(exe, ASP.NET 等) WF の進んだトピック 標準アクティビティ CAG (Conditioned Activity Group), トランザク ション、等 ルール、ポリシー ランタイムサービスとそのカスタマイズ トラッキングサービス、永続化サービス、等 ビジュアルデザイナーをアプリケーション内で 再利用可能 技術情報リソース Windows Vista デベロッパー センター: http://www.microsoft.com/japan/msdn/windowsvista/ .NET Framework デベロッパー センター: http://www.microsoft.com/japan/msdn/netframework/ Microsoft Windows Workflow Foundation 入門(手引き): http://www.microsoft.com/japan/msdn/windowsvista/general/WWFGetS tart.asp MSDN® Workflow Page : http://msdn.microsoft.com/workflow MSDN フォーラム Windows Workflow Foundation ( WF ) : http://forums.microsoft.com/MSDNJA/ShowForum.aspx?ForumID=799&SiteID=7 © 2006 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
© Copyright 2024 ExpyDoc