Asp.net Google Charts SSL обработчик для GeoMap - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь просмотреть диаграммы Google на сайте, используя SSL.

Google Charts не поддерживают SSL, поэтому, если мы используем стандартные диаграммы, мы получаем предупреждающие сообщения.

Я планирую создать обработчик ASHX, который будет размещен на защищенном сайте, который будет извлекать контент из Google и передавать его на страницу, которую просматривает пользователь.

Используя VS 2008 SP1 и включенный веб-сервер, моя идея отлично работает как для Firefox, так и для IE 8 и 9 (предварительный просмотр), и я могу видеть свою географическую карту на своей странице в должном порядке. Но моя проблема заключается в том, что когда я публикую на IIS7 страницу, используя свой обработчик для создания геокарты, она работает в Firefox, но не в IE (каждая версия).

Нет ошибок ни в одном из файлов журналов, но когда я щелкаю правой кнопкой мыши в IE в области, где должна отображаться карта, в контекстном меню появляется сообщение о том, что «фильм не загружен»

Ниже приведен код моего обработчика и страницы aspx.

Я отключил сжатие в своем файле web.config.

Даже в IE я бью все свои точки останова, и когда я использую инструменты разработчика IE9, веб-страница генерируется правильно со всем правильным кодом, URL-адресами и ссылками.

Если у вас есть более эффективные способы решения этой проблемы или как я могу решить мою проблему, я буду признателен за это.

Спасибо

Ian

Handler (ASHX)

  public void ProcessRequest(HttpContext context)
    {
        String url = "http://charts.apis.google.com/jsapi";

        string query = context.Request.QueryString.ToString();
        if (!string.IsNullOrEmpty(query))
        {
            url = query;
        }

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(HttpUtility.UrlDecode(url)));

        request.UserAgent = context.Request.UserAgent;
        WebResponse response = request.GetResponse();

        string PageContent = string.Empty;
        StreamReader Reader;

        Stream webStream = response.GetResponseStream();

        string contentType = response.ContentType;

        context.Response.BufferOutput = true;
        context.Response.ContentType = contentType;
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        context.Response.Cache.SetNoServerCaching();
        context.Response.Cache.SetMaxAge(System.TimeSpan.Zero);

                string newUrl = IanLearning.Properties.Settings.Default.HandlerURL; //"https://localhost:444/googlesecurecharts.ashx?";

        if (response.ContentType.Contains("javascript"))
        {
            Reader = new StreamReader(webStream);
            PageContent = Reader.ReadToEnd();

            PageContent = PageContent.Replace("http://", newUrl + "http://");
            PageContent = PageContent.Replace("charts.apis.google.com", newUrl + "charts.apis.google.com");
            PageContent = PageContent.Replace(newUrl + "http://maps.google.com/maps/api/", "http://maps.google.com/maps/api/");

            context.Response.Write(PageContent);
        }
        else
        {
            {
                byte[] bytes = ReadFully(webStream);
                context.Response.BinaryWrite(bytes);
            }
        }

        context.Response.Flush();
        response.Close();
        webStream.Close();
        context.Response.End();
        context.ApplicationInstance.CompleteRequest();
    }

ASPX Page

<%@ Page Title="" Language="C#" MasterPageFile="~/Site2.Master" AutoEventWireup="true"
    CodeBehind="googlechart.aspx.cs" Inherits="IanLearning.googlechart" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

<script type='text/javascript' src='~/googlesecurecharts.ashx?'></script>
<script type='text/javascript'>
    google.load('visualization', '1', { 'packages': ['geomap'] });
    google.setOnLoadCallback(drawMap);

    var geomap;

    function drawMap() {
        var data = new google.visualization.DataTable();
        data.addRows(6);
        data.addColumn('string', 'City');
        data.addColumn('number', 'Sales');
        data.setValue(0, 0, 'ZA');
        data.setValue(0, 1, 200);
        data.setValue(1, 0, 'US');
        data.setValue(1, 1, 300);
        data.setValue(2, 0, 'BR');
        data.setValue(2, 1, 400);
        data.setValue(3, 0, 'CN');
        data.setValue(3, 1, 500);
        data.setValue(4, 0, 'IN');
        data.setValue(4, 1, 600);
        data.setValue(5, 0, 'ZW');
        data.setValue(5, 1, 700);

        var options = {};
        options['region'] = 'world';
        options['dataMode'] = 'regions';
        options['showZoomOut'] = false;

        var container = document.getElementById('map_canvas');
        geomap = new google.visualization.GeoMap(container);

        google.visualization.events.addListener(
        geomap, 'regionClick', function(e) {
            drillDown(e['region']);
        });

        geomap.draw(data, options);
    };

    function drillDown(regionData) {
      alert(regionData);
    }
</script>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div id='map_canvas'>
    </div>
</asp:Content>
...