2

私が求めているのは、新しい TFS 2012 サーバーに保存された作業項目の特定のフィールドに加えられたすべての変更をキャッチする方法です。これにより、他のロジック (ヘルプ デスク API を介して更新を処理する) を実行し、結果に基づいて結果を得ることができます。開発者によって変更されたもの。

私は1週間以上苦労しており、グーグルと参考資料を読んでいますが、TFS 2012では何も機能しないようです。

私は次のセットアップを試しました:

TFS 2010 でのサーバー側イベント ハンドラーの開発とデバッグ (GeeksWithBlogs)

そして、運がなければ、他の多くの「信頼できる」情報源。

私は一般的なアドバイスには興味がありませんが、この問題に対する具体的な解決策です。これを行うにはおそらく複数の方法がありますが、うまくいく方法に落ち着きます。

アプリケーション開発のこの部分を締め切り近くまで延期しました。最初に読んだときは簡単なことのように思えたからです。Microsoft.TeamFoundation.WorkItemTracking.Client ライブラリを使用してこの作業を行うことができると想像しましたが、クライアント コードからサブスクライブする事前定義された Event がないことが判明しました。(または私はそれを見つけていません)。したがって、上記のリンクで説明されているように、カスタム イベント ハンドラーを作成し、TFS の Plugins ディレクトリにインストールする必要があると思いますが、これを行うと、TFS のデバッグ中に例外が発生し、何も起こりません。

First-chance exception at 0x000007FEFD90BCCD (KernelBase.dll) in w3wp.exe

だから今、私は締め切りを過ぎており、これに対する実行可能な解決策をパニックで探してから、アプリケーションのヘルプデスク側でチケットを処理する必要があったように、定期的にループして WorkItems をチェックする手動の方法に頼っています。

イベントとデリゲートについてもっと知っていれば、これに対する良い解決策を作成できると思いますが、私は知りません。現在、C# を学習中なので...

4

2 に答える 2

0

TFS イベント ハンドラーを作成することは、TFSISubscriber内のデータを操作する最も効率的な方法です。プラグインが適切な .NET Framework バージョンに対してビルドされ、AnyCPU または x64 のいずれかであることが重要です。x86 バイナリは TFS 2012 にロードできません (x64 のみ)。さらに、TFS 2012 では、これらのプラグインは現在 .NET 4.0/4.5 である必要があり、11.0.0.0 サーバー ビットを参照する必要があります。

イベントログに記録されている可能性がある、またはデバッガーを TFS Web アプリケーションに接続することによって見つけることができる可能性がある正確な例外の詳細がなければ、現在の実装で発生している問題をデバッグすることはできません。

別の方法として、クライアント オブジェクト モデルを使用する必要があるため、操作が簡単な「古いスタイル」の SOAP イベント ハンドラを使用できます。さらに、完全な TFS インスタンスをインストールしなくてもローカル マシンで実行できるため、デバッグがはるかに簡単です。TFS 2012 では、Web アクセス インターフェイスから自分の名前 (右上隅) をクリックし、[マイ アラート] を選択して、これらの種類のアラートを構成できます。

[高度なアラート管理ページからチーム アラートを管理できます] リンクをクリックして、新しいイベントを構成し、その [形式] を [SOAP] に設定します。[送信先] で、これらのアラートを処理するために TFS によって呼び出される必要がある Web サービス URL を指定できます。

このようなサービスを作成する最も簡単な方法は、単純な .asmx Web サービスを作成し、次のシグネチャを持つメソッドを 1 つ追加することです。

 [SoapDocumentMethod(Action="http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify", RequestNamespace = " http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]
 [WebMethod(MessageName=”Notify”)]
 public void Notify(string eventXml)
 {
         //Write your custom code here
         //Use eventXml to extract event related fields and their values
 }
于 2013-01-07T20:58:44.147 に答える