作成日: 2018/01/15 最終更新日: 2018/01/15
文書種別
使用方法
詳細
ActiveReportsのWebViewerコントロールやHTML5ビューワを使用してレポートを表示する場合、内部的にWebサービス(ActiveReports.ReportService.asmx)との通信が発生し、レポートの描画結果を取得しています。以下の概念図の場合、5がその通信です。

【WebViewerコントロールの動作概念図】
この通信は絶対パスで行われるため、クライアントの要求を処理するドメインと、内部的に配置されたWebサーバーのドメインが異なる環境(リバースプロキシ環境など)では、複数のドメインへの通信が混在した状態になります。このため、クライアントのクロスドメイン制約によってレポートが表示されなくなる可能性があります。
クロスドメイン通信が発生する環境でレポートの表示に失敗する場合、以下の方法をお試しください。
※以下で紹介している方法はFlashビューワには適用できません。
Flashビューワを使用する場合、Adobe Flash Playerの仕様によってクロスドメイン通信が制限されるため、独自の対処が必要となります。詳細については、こちらの文書をご参照ください。

【WebViewerコントロールの動作概念図】
この通信は絶対パスで行われるため、クライアントの要求を処理するドメインと、内部的に配置されたWebサーバーのドメインが異なる環境(リバースプロキシ環境など)では、複数のドメインへの通信が混在した状態になります。このため、クライアントのクロスドメイン制約によってレポートが表示されなくなる可能性があります。
■例
ビューワを配置したWebフォームのURL
>>http://app-server/WebForm1.aspx
リバースプロキシを経由したURL
>>http://reverse-proxy/WebForm1.aspx
レポートの描画結果を取得するURL
>>http://app-server/ActiveReports.ar11
クロスドメイン通信が発生する環境でレポートの表示に失敗する場合、以下の方法をお試しください。
※以下で紹介している方法はFlashビューワには適用できません。
Flashビューワを使用する場合、Adobe Flash Playerの仕様によってクロスドメイン通信が制限されるため、独自の対処が必要となります。詳細については、こちらの文書をご参照ください。
- リダイレクトを設定してクロスドメイン通信を回避する
Web.configファイルの記述によって、レポートの描画結果に対する要求URLにリダイレクトを設定することができます。前述の例の場合、以下のように記述します。
<configuration>
<ActiveReports11>
<WebService publicURI="http://reverse-proxy/"/>
</ActiveReports11>
</configuration>
このように設定した場合、レポートの描画結果を取得するURLは
"http://reverse-proxy/ActiveReports.ar11"となり、クロスドメイン通信自体が発生しなくなります。 - レスポンスヘッダを追加してクロスドメイン通信を許可する
レスポンスヘッダに"Access-Control-Allow-Origin"を追加することでクロスドメイン通信を許可することができます。具体的にはアプリケーションにグローバルアプリケーションクラス(Global.asax)ファイルを追加し、以下の記述を追加します。
◆サンプルコード(VB.NET)
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*")
If HttpContext.Current.Request.HttpMethod = "OPTIONS" Then
HttpContext.Current.Response.AddHeader(
"Access-Control-Allow-Methods", "GET, POST, OPTIONS")
HttpContext.Current.Response.AddHeader(
"Access-Control-Allow-Headers", "Content-Type, Accept")
HttpContext.Current.Response.End()
End If
End Sub
◆サンプルコード(C#)
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader(
"Access-Control-Allow-Methods", "GET, POST, OPTIONS");
HttpContext.Current.Response.AddHeader(
"Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.End();
}
}
製品ヘルプの以下のトピックもご参照ください。
ActiveReportsユーザーガイド
- レポートの表示
- CORSを使用した異なるドメインからのレポートの表示
※注意
この方法はActiveReports独自の機能によるものではなく、Webアプリケーションでクロスドメイン通信を許可する一般的な手法です。しかしながら、ドメインが混在した状態は解消されないため、サーバーの設定(SSL設定など)によっては、通信が制限される可能性があります。基本的には前述1の方法をお勧めいたします。
旧文書番号
41475