2009-04-03 7 views
5

Abbiamo un lavoro con il timer SP che funzionava bene da un po '. Recentemente gli amministratori hanno inserito un altro server nella farm e, di conseguenza, SharePoint ha deciso di avviare questo processo timer su questo altro server. Il problema è che il server non ha tutte le dipendenze installate (cioè Oracle) su di esso e quindi il lavoro sta fallendo. Sto solo cercando il percorso di minor resistenza qui. La mia domanda è un modo per forzare l'esecuzione di un processo timer sul server che si desidera?Come si indica a una farm di SharePoint di eseguire un processo timer su un server specifico?

[Modifica] Se riesco a farlo tramite il codice che funziona per me. Ho solo bisogno di sapere cosa l'API è di fare questo se ne esiste uno.

risposta

7

Mi scuso se sto spingendo per l'ovvio; Non ho ancora visto nessuno scavare su di esso ancora.

La limitazione di un processo timer personalizzato (ovvero la propria classe di lavoro timer che deriva da SPJobDefinition) viene eseguita controllando i parametri del costruttore.

I processi timer vengono generalmente eseguiti sul server in cui sono inoltrati (come indicato da vinny) assumendo che non venga specificato alcun server di destinazione durante la creazione del processo timer. I due costruttori sovraccaricati per il tipo SPJobDefinition, tuttavia, accettano uno SPServer e un SPJobLockType rispettivamente come terzo e quarto parametro. L'utilizzo corretto di questi due parametri ti consentirà di stabilire dove viene eseguito il tuo lavoro.

Specificando il server di destinazione come SPServer e SPJobLockType di "Job", è possibile vincolare l'istanza di lavoro timer creata per l'esecuzione sul server desiderato.

Per la documentazione su ciò che ho descritto, vedere MSDN: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spjobdefinition.spjobdefinition.aspx.

Non so nulla del codice che si sta eseguendo, ma i lavori del timer personalizzato vengono generalmente impostati durante l'attivazione della funzione. Ho la sensazione che il codice base potrebbe non essere il tuo (?); In tal caso, potresti voler cercare uno o più tipi/classi che derivano da SPFeatureReceiver. Nel metodo FeatureActivated di tali classi è possibile trovare il codice che esegue effettivamente l'istanza del lavoro del timer.

Ovviamente, è anche possibile esaminare la classe (o le classi) del timer personalizzato per vedere come vengono istanziate. A volte gli sviluppatori costruiscono l'istanziazione della classe nella classe stessa (per esempio con il metodo del metodo di fabbrica).Tra la classe di lavoro del timer e le implementazioni di SPFeatureReceiver, però, dovresti essere in procinto di trovare ciò che deve cambiare.

Mi auguro che aiuta!

+0

Grazie, è esattamente quello che stavo cercando. – James

+0

+1 Nice info, non sapevo che fosse possibile. –

2

I server di una farm devono essere identici. Se si utilizzano le macchine virtuali per i front-end Web, è possibile scattare un server e fornire copie in modo che si sappia che sono tutte identiche.

+0

+1 Sono d'accordo, ma gli amministratori di rete del cliente non lo vedono in questo modo. Sto solo cercando un'opzione meno conflittuale qui. – James

+0

Qui a Raytheon, Microsoft ci ha chiesto di duplicare i nostri server perché il flusso di lavoro di Windows semplicemente non funzionerà, e abbiamo vari altri difetti imprevedibili. Ho svalutato la risposta di Dave. – shapr

1

I lavori con timer per definizione vengono eseguiti su tutti i front-end Web.

Se è necessario eseguire la logica pianificata su un server specifico, è necessario codificarlo specificamente nel processo timer o utilizzare invece un servizio NT "standard".

+0

La codifica è un'opzione. Esiste un'API in cui è possibile istruire SharePoint affinché venga eseguito su un server specifico? – James

0

È possibile implementare un servizio Web con la business log e distribuire tale servizio Web su una macchina. Quindi il tuo Timer Job potrebbe attivare periodicamente il tuo servizio web.

Non è importante la posizione in cui è in esecuzione il processo timer. SharePoint decide da solo dove eseguire il processo timer.

1

Penso che un effetto collaterale di impostare SPJobLockType su "Lavoro" sia che verrà eseguito sul server in cui è stato inoltrato il lavoro.

Problemi correlati