In questo periodo ho avuto l'occasione di utilizzare gran parte delle caratteristiche dei Word Automation Services di SharePoint 2010, per la conversione di documenti Word in altri formati. Nel mio caso, avevo la necessità di convertire un file Word in PDF.
Se non avete idea di che cosa siano i Word Automation Service o di come si usino vi rimando a queste pagine dell'SDK:
- http://msdn.microsoft.com/en-us/library/ee558278.aspx
- http://msdn.microsoft.com/en-us/library/ee557736.aspx
Ogni mia conversione falliva e l'errore riportato era il numero: 65543.
La documentazione dice che quel codice d'errore sta a significare che il file è corrotto oppure invalido. Lo potete leggere a questa pagina:
- http://msdn.microsoft.com/en-us/library/ff512774.aspx
A me pareva veramente strano che tutti i miei file fossero corrotti o invalidi, al punto che sono arrivato anche a crearne uno nuovo con dentro solo una riga di testo, per vedere se la conversione andava a buon fine o meno. Chiaramente senza nessun risultato positivo.
Controllando il modello ad oggetti però e cercando un pò su internet, sono riuscito a risolvere il problema. Basta solamente disabilitare una proprietà dei Word Automation Services, chiamata DisableSandbox, che specifica il contesto in cui deve girare la vostra service application. Di default ha valore "true", il che significa che di default i Word Automation Services girano all'interno del contesto ristretto delle sandbox, il che può portare ad errori di permessi o simili.
Nel mio caso, appunto, dal contesto limitato delle sandbox il servizio di conversione non riusciva ad accedere al file tramite una richiesta HTTP.
Per modificare questa configurazione, bastano tre semplici righe di codice all'interno di PowerShell:
$sp = Get-SPServiceApplication | where {$_.TypeName.Equals("Word Automation Services")}
$sp.DisableSandbox = $true
$sp.Update()
Questo mini-script è presente anche all'interno della code gallery di Microsoft a questo indirizzo:
- http://gallery.technet.microsoft.com/scriptcenter/Remove-Sandbox-Mode-for-9c8ac750
Spero che possa esser utile a qualcuno, perchè io ci ho perso almeno un'ora dietro a sto scherzo :)