Visual Studio 2008 で楽になった WCF サービスのデバッグ

環境:Visual Studio 2008 こんにちは。 Visual Studio 2008 では、WCF サービスのデバッグが非常に楽になっています。WCF サービスでは、サービスライブラリを作成し (dll の作成)、ホストプログラムを作成し (exe の作成。もしくは、IIS/WAS にホスト)、ホスト側で .config を作成してはじめて起動の準備が整います。このホストされた WCF をデバッグするというのは、これと接続するクライアントの構築まで考えると、プロセスのアタッチなどなど、さらに方法の検討が必要になってくることでしょう。(http://msdn2.microsoft.com/ja-jp/library/bb157685.aspx)Visual Studio 2008 では、この点にも改善が加えられています。 Visual Studio 2008 (RTM版) で単に WCF サービスライブラリ(dll のみ)を作成して、F5 を押してみてください。Beta 版の頃は最終的な姿が理解できないほど未完成でしたが、RTM 版ではその便利な仕組みを実感することができます。 Visual Studio 2008 (.NET Framework 3.5) では、デバッグをおこなうと、サービスライブラリの App.config に基づいて WcfSvcHost.exe というサービスホストのプログラムが自動で起動するようになっています。(ですので、今後は、サービスライブラリ側の .config も、消さずにデバッグ用に残しておきましょう。)  さらに、このサービスと接続するクライアントも自動生成されています。上記の画面は、このクライアントアプリケーションそのものが表示されています。F5 によるデバッグと共に、このサービスと接続する専用の dll と config がユーザフォルダの「ドキュメント」の下に作成され、これが WcfTestClient.exe という組み込みのクライアントによりロードされ、自動実行されています。 このデバッグですが、サービスがワークフローサービスホスト (Workflow Enabled…

2

デモでご紹介していたソースの .NET Framework 3.5 "RTM 版" における変更

環境:Visual Studio 2008 こんにちは。 ASP.NET の画面からの WCF へのアクセス (このシナリオでは、毎回 WCF サービスの接続が切れてしまいます) や、Workflow Enabled Service (WorkflowServiceHost を使った WCF サービス) による long-running トランザクションのサービスにおけるライフサイクル管理、などの目的で使用する Context オブジェクト (IContextManager を実装したクラス) について、Beta 2 から RTM 版で仕様変更がありました。 各所でご紹介しているサンプルのうち、以下が変更になります。 以下の MSDN サンプルソース、及び Web キャストでご紹介しているソースの変更 (今後、コンテンツ自体も正式に変更致します)WCF と WF の連携 (第2回)http://www.microsoft.com/japan/msdn/windows/windowsserver2008/tab/code/wcfwf2.aspx IT Pro 道場「アプリケーションプラットフォーム編」のデモの中でご紹介しているソースコードの変更 (受講者の方にお配りしたテキストに記載しているソースコード) 変更された箇所は、 以下です。     // クライアントのプロキシを作成    ServiceReference.Workflow1Client cl = new ServiceReference.Workflow1Client();     //…

1

Office / MOSS に関するセミナーでの質問事項

こんにちは。 Office / MOSS に関し、セミナーを通しよく頂いたご質問を MSDN フォーラムに記載しました。 WSS 3.0 と MOSS 2007 の相違は何ですか? 現状のSPS2003をMOSS2007に移行させるための詳細な技術情報を教えてください SharePoint Portal Server (SPS) 2003 から仕様変更のあったクラスメソッド機能などの一覧などはあるのでしょうか? MOSS 2007 は Windows Server 2008 に対応していますか? Visual Studio 2008 で作成したワークフローを本番環境に展開する場合、本番環境に .NET Framework 3.5 (Runtime) は必要ですか ? VSeWSS は Visual Studio 2008 でサポートされますか ?   

1

[IT Pro 道場補足] そして、Windows Server 2008 Eventing System

IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム  こうして開発コードが対処できれば、あとはインフラのパワーの見せどころです。Windows Server 2008 では、イベントをある単一のマシンに集約することもできます。また、特定のイベントに対し、メール送信や、プログラム実行などのタスク (イベントタスクと呼ばれ、タスクスケジューラに設定されます) を設定することもできます。つまり、Windows の標準的な仕組みを使うだけでも、運用系のそこそこの機能を作りこむことができます。(無論、System Center や MOM などの Microsoft 製品、さらには日本のメーカー各社から出ている運用/監視系の製品などと組み合わせる際にも役に立ちます。) また、イベントタスクの設定やら、IIS の設定やらと、OS 廻りの設定が増えてくると設定ミスも増えてくることでしょう。そもそも手で設定すること自体面倒になるはずです。奥主が説明していたように、IIS7 では appcmd というコマンドでいままでメタベースなどに個別設定しないといけなかったものなども含め、すべてコマンドで実施できるようになっています。その他の機能も同様のコンセプトがあり、例えば、上記のイベントタスクを設定するようなシナリオも、以下のように、XML を作成し、schtasks コマンドを流すことでコマンドで自動設定できます。(これは、MSDN の http://msdn2.microsoft.com/en-us/library/aa446889.aspx に掲載されています。尚、xml の作成が面倒という方は、UIで作成したイベントタスクをタスクスケジューラからエクスポートすることで同様の xml を取得できます。) ■実行するコマンドschtasks…

3

[IT Pro 道場補足] WorkflowServiceHost からイベント ログ (Event Log) を出力する

IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム  では、つぎに、ワークフローサービスホスト (WES) からイベントログを出力する方法について記載します。 エッセンスは変わりません。ここから読まれている方は、前回の「WCF サービスからイベントログを出力する方法」を参照してください。リソースファイルをサービスの dll に添付するというところも前回同様です。 しかし、1 つだけ、異なる点があります。それは、ワークフローサービスホストの場合、WCF サービスのときのように IErrorHandler を実装する手段がないということです。ワークフローサービスホストの場合、WF (Windows Workflow Foundation) にエラーハンドリングのための機構があり、これを利用することができます。では、以下にそのエラーハンドリングのための手順を記載します。 まず、ワークフローのデザイナーを開き、コンテキストメニューから [エラーハンドラの表示] を選択します。エラーハンドリングのためのワークフロー設定画面が表示されます。 表示される [エラーハンドリング] 用のデザイナーでは、「どの例外に対してどのような処理を作成するか」を複数設定できます。今回は、もっとも簡単に、「System.Exception (すべての例外) を対象に、イベントログに出力する」といった処理を作っていきます。まず、ツールボックスから [FaultHandler] アクティビティをドラッグアンドドロップし、[FaultHandler] アクティビティの下段に [Code]…

2

[IT Pro 道場補足] WCF サービスからイベントログ (Event Log) を出力する

IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム   ここからは、イベントログの活用術について説明します。 エラー処理は集中的に管理し、この集中管理されたリポジトリを使って統一的に運用の機能を作りこみたいものです。さて、IIS、SQL Server などなど多くの Windows 関連の製品がイベントログに対応していますが、このイベントログをデモでお見せしたような自作のアプリケーションからも使って、統一的な管理をしたくなることでしょう。そこで以下では、自作のアプリで、イベントログをどう使っていくかという内容を記述します。(尚、ここでも、.NET Framework 3.5 の新しいクラスを使います。) まずは、標準的な WCF サービスの場合についてです。 WCF では、.config を設定することでログの出力が可能です。しかし、この仕組みは、トレースを出力するもので、作成したアプリケーションのコード部分を含む特定の例外などを処理するためのいわゆるエラーログではありません。ですから、本番環境でこのような設定 (.config) を仕掛けてしまうと、やりとりされているメッセージの情報がトレースにどんどん書かれてしまいますので良くありません。(あくまでもデバッグやパフォーマンス検証などの目的で使う仕組みです。)そこで、以下では、例外の処理を中心にイベントログに書き込む方法について説明します。 まず、前提知識として、以下の Web キャストを参照してください。(コードはほとんど出てきませんので、IT Pro の方も是非ご視聴ください。) イベントログの活用http://www.microsoft.com/japan/msdn/windows/windowsserver2008/tab/code/eventlog.aspx ここでおこなっているデモのエッセンスをご説明しますと、C# や VB などマネージコードで作成したカスタムアプリでもイベントログが簡単に扱えるというデモです。手順は、ビデオでご紹介しているように、 まず、イベントマニフェストと呼ばれる…

3

[IT Pro 道場補足] NLB (affinity : none) におけるステートフルな処理の方法

(2008/09/01 留意事項を追記)  IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム   奥主がデモでお見せしたように、NLB を構成し、しかも affinity = none とした場合でも、Web サーバ / アプリケーションサーバ (WCF サービス) に分離した構成で快適に稼動させることができます。(というか、すみません、そんな素敵なデモをお見せするはずでしたので、今回は下記説明のみとします。) この場合のポイントは、要求のたびにマシンが切り替わる可能性があるという点です。(お伝えしたように、アルゴリズム上、クライアント台数が少ないと偏りますが、台数が増えると、きれいに振り分けをやってくれます。) また、Web サーバ (ASP.NET の画面側) はマシン A につながり、アプリケーションサーバ (バックの WCF サービス) はマシン B につながることもあるかもしれません。ご説明したように、Web…

2

[IT Pro 道場補足] 大量データを GridView で処理する

IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム   WCF のワークフローサービスをはじめとし、間にビジネスロジック処理部分に相当するサービスを介して Web の UI 上でグリッド表示をおこなうには、プログラムによるデータの取得が必要なため、「オブジェクトデータソース」というものを使用します。オブジェクトデータソースでは、データを取得するメソッド(およびそのメソッドを提供するクラス)を指定してこれを利用して処理されますが、ここでは、その使い方の詳細は記載しません。基本的な手順については、こちらのStep7 などを参照してください。 ここでは、このオブジェクトデータソースを使って、デモでお見せしたような 10 万件、100 万件といった大量データを扱う方法について記載します。 オブジェクトデータソースでは、たとえページング処理をおこなって件数を絞ったとしても、毎回、全件検索をおこないます。(というか、正確な書き方をすると、そうした関数を標準で利用するようになっています。) この理由は、たとえページング処理をおこなっていても、件数が何件あるかわからなければ、ページングで何ページ目までを表示してよいかわからないためです。(IT Pro 的には、SQL プロファイラーなどを使って毎回検索に走っているのが確認 (トレース) できます。) さて、たとえ表示するデータ数が 5, 6 件であっても、ビジネスロジック層 (WCF サービスなどのアプリケーションサーバ側) で全件検索して受け渡すわけですから、ビジネスロジックを実装しているアプリケーションサーバーとUIを実装しているWebサーバー間を 10 万件のデータが流れることになります。これでは、大規模なシステムには対応できません。では、このオブジェクトデータソースの動きを制御できないのでしょうか? 実は可能です。 デモでは何も説明せずに直してしまいましたが(すみませんでした、時間の関係で割愛しました)、おおまかに概念を記載すると、オブジェクトデータソースにおける「データを取得するメソッド」を「データ件数を取得するメソッド」と「表示データのみを取得するメソッド」にわけて実装する、といった感じに実装方法を変えます。では、その手順を以下に記載します。…

2

[IT Pro 道場補足] IIS 7 を使ったモジュール統合

IT Pro 道場 (東京) 補足 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベント ログを出力する ワークフロー サービスホストからイベント ログを出力する そして、Windows Server 2008 イベンティング システム  デモでは、ここもほとんどお見せすることができませんでしたが、完成形のデモ(最後ビデオを見て頂いたもの)では、実は、イメージもデータベースに登録し、このデータベース上のイメージを表示しています。 こうした処理を作成するためには、1 つの方法として、IIS のハンドラと呼ばれる処理を (開発者が) 作成します。簡単に書いてしまうと、ある拡張子のときに (例えば、.image という拡張子でアクセスした場合に) 内部でどのような処理をおこなってどのように出力するかをコードを使って記述できるものです。ハンドラを記述したサンプルコードについては、 IIS7 によるカスタムモジュールの作成http://msdn.microsoft.com/ja-jp/events/dd266858.aspx の一番下にサンプルコードを示しています。このサンプルコードでは、イメージにアクセスすると、そのイメージの ファイル を Bitmap オブジェクトとして取得し、そこに加工をおこなって出力をおこなっています。IT Pro 道場でお見せしているデモでは、この箇所は、WCF サービスを呼び出して、呼び出された WCF サービスの中で、データベース に接続をおこない、イメージのバイナリデータを返すといった処理を作成していました。実際にこうしたアプリを作る際、ここで、新技術におけるいくつかの便利になったポイントがありますので、以下に記載します。 ポイント1 従来、こうしたカスタムのハンドラを作成して組み込むには、ネイティブのコードなどで処理を作成して、別途 IIS に組み込む必要があったのではないかと思います。IIS 7 では、マネージコード (C#…

2

IT Pro 道場「アプリケーションプラットフォーム編」(東京) 参加者の方へ

こんにちは。  IT Pro 道場「アプリケーションプラットフォーム編」にご参加いただき、ありがとうございました。と共に、いきなりアプリが動かず、以降のデモのいっさいをお見せすることができなくなってしまい申し訳ございませんでした。 今回ご紹介できなかったアプリ開発関連の分について、以下に補足で掲載させていただきます。 IIS 7 を使ったモジュール統合 大量データを GridView で処理する NLB (affinity : none) におけるステートフルな処理の方法 WCF サービスからイベントログを出力する ワークフローサービスホストからイベントログを出力する そして、Windows Server 2008 イベンティングシステム  

0