Distribuzione side-by-side di Reporting Services e Internet Information Services

È possibile installare ed eseguire SQL Server 2008 R2 Reporting Services e Internet Information Services (IIS) nello stesso computer. La versione di IIS utilizzata determina i problemi di interoperabilità che è necessario risolvere.

Versione di IIS

Problemi

Descrizione

IIS 6.0 e 7.0

Richieste destinate a un'applicazione vengono accettate da un'applicazione diversa.

HTTP.SYS applica regole di precedenza per le prenotazioni URL. Le richieste inviate ad applicazioni con lo stesso nome di directory virtuale e che eseguono congiuntamente il monitoraggio della porta 80 potrebbero non raggiungere la destinazione desiderata se la prenotazione URL è debole rispetto alla prenotazione URL di un'altra applicazione.

In determinate condizioni, un endpoint registrato che prevale su un altro endpoint URL nello schema di prenotazione degli URL potrebbe ricevere richieste HTTP destinate all'altra applicazione.

L'utilizzo di nomi univoci per le directory virtuali per il servizio Web ReportServer e Gestione report consente di evitare questo conflitto.

Informazioni dettagliate su questo scenario vengono fornite in questo argomento.

IIS 5.1

Conflitto di porte

Per impostazione predefinita, IIS 5.1 riserva la porta 80 per il proprio utilizzo esclusivo. Se si installa SQL Server 2008 R2 Reporting Services in Windows XP a 32 bit (SP2), la porta predefinita per gli URL di Reporting Services sarà la porta 8080:

http://<nomeserver>:8080/reportserver

http://<nomeserver>:8080/reports

Nella piattaforma a 64 bit la porta predefinita per gli URL di Reporting Services è la porta 80. Nella versione a 64 bit di Windows XP SP2 IIS 5.1 utilizza HTTP.SYS , consentendo a entrambe le applicazioni di condividere la porta 80.

Regole di precedenza per le prenotazioni URL

Prima che di passare alla risoluzione dei problemi di interoperabilità tra IIS e Reporting Services, è necessario comprendere le regole di precedenza relative alle prenotazioni degli URL. Le regole di precedenza possono essere generalizzate nell'affermazione in base alla quale una prenotazione URL che ha valori definiti in modo più esplicito ha la precedenza nella ricezione di richieste che corrispondono all'URL. 

  • Una prenotazione URL che specifica una directory virtuale è più esplicita di una prenotazione che la omette.

  • Una prenotazione URL che specifica un solo indirizzo (come indirizzo IP, nome di dominio completo, nome di un computer di rete o nome host) è più esplicita rispetto a un carattere jolly.

  • Una prenotazione URL che specifica un carattere jolly complesso è più esplicita rispetto a una prenotazione che utilizza un carattere jolly vulnerabile.

Negli esempi seguenti è mostrato un intervallo di prenotazioni URL, ordinate dalle più esplicite a quelle meno esplicite:

Esempio

Richiesta

http://123.234.345.456:80/reports

Riceve tutte le richieste inviate all'indirizzo http://123.234.345.456/reports o http://<nomecomputer>/reports se un servizio DNS può risolvere l'indirizzo IP in tale nome host.

http://+:80/reports

Riceve tutte le richieste inviate a qualsiasi indirizzo IP o nome host valido per tale computer finché l'URL contiene il nome della directory virtuale "reports".

http://123.234.345.456:80

Riceve qualsiasi richiesta che specifica l'indirizzo http://123.234.345.456 o http://<nomecomputer> se un servizio DNS può risolvere l'indirizzo IP in tale nome host.

http://+:80

Riceve le richieste che non sono già state ricevute da altre applicazioni, per qualsiasi endpoint dell'applicazione mappato all'opzione Tutti assegnati.

http://*:80

Riceve le richieste che non sono già state ricevute da altre applicazioni, per gli endpoint dell'applicazione mappati all'opzione Non assegnati.

Un'indicazione di un conflitto di porte è la visualizzazione del messaggio di errore seguente: "System.IO.FileLoadException: Il processo non può accedere al file perché è in uso da un altro processo. (Eccezione da HRESULT: 0x80070020)".

Prenotazioni URL per IIS 6.0 e 7.0 e SQL Server 2008 Reporting Services

Stabilite le regole di precedenza descritte nella sezione precedente, è possibile iniziare a comprendere in che modo le prenotazioni URL definite per Reporting Services e IIS agevolano l'interoperabilità. Reporting Services riceve le richieste che specificano in modo esplicito i nomi delle directory virtuali per le proprie applicazioni, mentre IIS riceve tutte le richieste rimanenti che possono pertanto essere dirette ad applicazioni eseguite all'interno del modello di processo di IIS.

Applicazione

Prenotazione URL

Descrizione

Ricezione richiesta

Server di report

http://+:80/ReportServer

Carattere jolly complesso sulla porta 80, con directory virtuale del server di report.

Riceve sulla porta 80 tutte le richieste che specificano la directory virtuale del server di report. Il servizio Web ReportServer riceve tutte le richieste all'indirizzo http://<nomecomputer>/reportserver.

Gestione report

http://+:80/Reports

Carattere jolly complesso sulla porta 80, con directory virtuale Reports.

Riceve sulla porta 80 tutte le richieste che specificano la directory virtuale reports. Gestione report riceve tutte le richieste all'indirizzo http://<nomecomputer>/reports.

IIS

http://*:80/

Carattere jolly vulnerabile sulla porta 80.

Riceve sulla porta 80 tutte le richieste rimanenti che non vengono ricevute da un'altra applicazione.

Distribuzioni side-by-side di SQL Server 2008 e SQL Server 2005 Reporting Services in IIS 6.0 o 7.0

I problemi di interoperabilità tra IIS e Reporting Services si verificano quando i nomi delle directory virtuali dei siti Web di IIS sono identici a quelli utilizzati da Reporting Services. Si supponga ad esempio di disporre della configurazione seguente:

  • Un sito Web in IIS assegnato alla porta 80 e una directory virtuale denominata "Reports".

  • Un'istanza del server di report di SQL Server 2008 R2 installata nella configurazione predefinita, in cui anche la prenotazione URL specifica la porta 80 e l'applicazione Gestione report utilizza "Reports" come nome della directory virtuale.

In una configurazione di questo tipo una richiesta inviata all'indirizzo http://<nomecomputer>:80/reports verrà ricevuta da Gestione report. L'applicazione cui si accede tramite la directory virtuale Reports in IIS non riceverà più richieste dopo l'installazione dell'istanza del server di report di SQL Server 2008 R2.

Se si eseguono distribuzioni side-by-side di versioni meno recenti e più recenti di Reporting Services, è possibile che si verifichi il problema di routing descritto in precedenza, poiché tutte le versioni di Reporting Services utilizzano "ReportServer" e "Reports" come nomi delle directory virtuali per le applicazioni di server di report e Gestione report, aumentando la probabilità della presenza di directory virtuali "reports" e "reportserver" in IIS.

Per garantire che tutte le applicazioni ricevano richieste, adottare le linee guida seguenti:

  • Per le installazioni di Reporting Services, utilizzare nomi delle directory virtuali che non siano già utilizzati da un sito Web di IIS sulla stessa porta di Reporting Services. Se si verifica un conflitto, installare Reporting Services in modalità "solo file", utilizzando l'opzione Installa senza configurare l'opzione server dell'Installazione guidata, in modo che sia possibile configurare le directory virtuali al termine dell'installazione. Un'indicazione della configurazione come conflitto è la visualizzazione del messaggio di errore seguente: System.IO.FileLoadException: Il processo non può accedere al file perché è in uso da un altro processo. (Eccezione da HRESULT: 0x80070020).

  • Per installazioni da configurare manualmente, adottare le convenzioni di denominazione predefinite negli URL configurati. Se si installa SQL Server 2008 R2 Reporting Services come istanza denominata, includere il nome dell'istanza al momento della creazione di una directory virtuale.

Interoperabilità con IIS 5.1 in Windows XP SP2

In Windows XP SP2 è disponibile il componente HTTP.SYS richiesto da Reporting Services, che però non viene utilizzato da IIS 5.1. IIS 5.1 accetta tutte le richieste sulla porta 80 o su qualsiasi porta che può utilizzare in base alla propria configurazione. Poiché in HTTP.SYS non è presente alcuna prenotazione URL per IIS 5.1, non è prevista alcuna gestione centrale della coda di richieste che consente alle applicazioni Web Reporting Services di ricevere richieste sulla stessa porta.

Per tale ragione, la configurazione predefinita per un server di report installato in Windows XP SP2 a 32 bit prevede di utilizzare la porta 8080 per il servizio Web ReportServer e Gestione report. Nella tabella seguente vengono illustrate le prenotazioni URL per il servizio Web e Gestione report:

  • http://+:8080/reportserver

  • http://+:8080/reports

Se per le applicazioni Reporting Services viene utilizzata una porta non predefinita per la prenotazione URL, non esiste alcun conflitto URL per gli scenari in cui è presente l'installazione side-by-side di Reporting Services con versioni precedenti.

Se nello stesso computer sono installate una versione meno recente e una più recente del server di report, gli URL predefiniti saranno http://<nomeserver>/<reportserver> per il server di report di Reporting Services 2005 cui si accede tramite IIS e http://<nomeserver>:8080/<reportserver> per il server di report di SQL Server 2008 R2 Reporting Services.