6

かなり長い間正常に実行されていた SP タイマー ジョブがあります。最近、管理者が別のサーバーをファームに参加させたため、SharePoint はこの別のサーバーでこのタイマー ジョブの実行を開始することにしました。問題は、サーバーにすべての依存関係 (Oracle など) がインストールされていないため、ジョブが失敗することです。ここで最も抵抗の少ない道を探しているだけです。私の質問は、タイマー ジョブを実行したいサーバー上で強制的に実行する方法はありますか?

[編集] 自分に合ったコードでそれができれば。APIが存在する場合、これを行うためのAPIが何であるかを知る必要があります。

4

5 に答える 5

7

明白なことを主張している場合は申し訳ありません。私はまだ誰かが掘り下げているのを見たことがありません。

カスタム タイマー ジョブ (つまり、SPJobDefinition から派生した独自のタイマー ジョブ クラス) の制約は、コンストラクター パラメーターを制御することによって行われます。

タイマー ジョブは通常、タイマー ジョブの作成時にターゲット サーバーが指定されていないと仮定して、送信先のサーバー上で実行されます (vinny で示されます)。ただし、SPJobDefinition 型の 2 つのオーバーロードされたコンストラクターは、SPServer と SPJobLockType をそれぞれ 3 番目と 4 番目のパラメーターとして受け入れます。これら 2 つのパラメーターを適切に使用すると、ジョブの実行場所を指定できます。

ターゲット サーバーを SPServer として指定し、SPJobLockType を "Job" に指定することで、作成するタイマー ジョブ インスタンスを任意のサーバーで実行するように制限できます。

私が説明した内容に関するドキュメントについては、MSDN を参照してください: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjobdefinition.spjobdefinition.aspx

実行しているコードについては何も知りませんが、カスタム タイマー ジョブは通常、機能のアクティブ化中に設定されます。あなたのコードベースはあなたのものではないかもしれないと感じました (?)。その場合は、SPFeatureReceiver から派生した 1 つ以上の型/クラスを探すことができます。このようなクラスの FeatureActivated メソッドには、タイマー ジョブのインスタンス化を実際に実行するコードが含まれている場合があります。

もちろん、カスタム タイマー ジョブ クラス (または複数のクラス) 自体を調べて、それらがどのようにインスタンス化されているかを確認することもできます。開発者は、クラスのインスタンス化をクラス自体に組み込むことがあります (たとえば、Factory Method パターンを使用)。ただし、タイマー ジョブ クラスと SPFeatureReceiver の実装の間で、何を変更する必要があるかを見つけようとしているはずです。

それが役立つことを願っています!

于 2009-06-24T16:55:26.190 に答える
2

ファーム内のサーバーは同一である必要があります。Web フロント エンドに VM を使用している場合は、サーバーをスナップしてコピーをプロビジョニングすることで、それらがすべて同一であることを確認できます。

于 2009-04-03T17:16:22.003 に答える
1

SPJobLockTypeを「Job」に設定することの副作用は、ジョブが送信されたサーバーで実行されることだと思います。

于 2009-04-17T21:45:30.713 に答える
1

定義ごとのタイマー ジョブは、すべての Web フロント エンドで実行されます。

特定のサーバーでスケジュールされたロジックを実行する必要がある場合は、タイマー ジョブでこれを具体的にコーディングするか、代わりに「標準」の NT サービスを使用する必要があります。

于 2009-04-03T19:16:39.610 に答える
0

ビジネス ログを使用して Web サービスを実装し、その Web サービスを 1 台のマシンにデプロイできます。次に、タイマー ジョブが Web サービスを定期的にトリガーする可能性があります。

タイマージョブが実行されている場所はそれほど重要ではありません。SharePoint は、タイマー ジョブを実行する場所を自動的に決定します。

于 2009-04-03T23:13:34.970 に答える