Необходимо использовать метод типа GetStream для отображения HTML-страниц - PullRequest
0 голосов
/ 07 января 2011

У меня есть usercontrol, который в настоящее время читает и возвращает данные из XML-файла в браузер. XML-файл находится на другом сервере. Код генерирует динамический URL, а затем возвращает XML из этого URL в браузер с помощью метода GetStream. Это работает как ожидалось. Теперь мне нужно сделать еще один шаг ... возвращенные данные отображают список ссылок на HTML-файлы. Эти ссылки работают внутри корпоративной сети, как при открытии любого URL-адреса ... однако они не работают вне корпоративной сети без ограничений брандмауэра. Но у нас, очевидно, есть возможность отображать данные с этого сервера, поскольку он может отображать данные из файла XML ... который находится в том же месте / сервере, что и файлы HTML. Итак, как мне отобразить HTML-данные, когда пользователь нажимает на одну из этих ссылок?

Вот что у нас есть:

// Returns a dataset from xml with the html files available to a vendor.
private static DataSet GetDocuments(string VendorId)
    {
        DataSet ds = new DataSet("VendorDocuments");

        if (null != VendorId)
        {
            string uri = ILINKURL + "/supplierstaging/" + VendorId + "/listinfo.xml";

            Stream stream = GetStream(uri);

            ds.ReadXml(stream);

            Logger.Write("Requested drawings for vendor '" + VendorId + "' at " + uri + ".", "Machinery", 5, 200, System.Diagnostics.TraceEventType.Information);
        }

        return ds;
    }

// вот метод GetStream

 public static Stream GetStream(string uri)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        Stream stream = response.GetResponseStream();

        Logger.Write("got response stream from CompressionMachinery.GetStream('" + uri + "')", "Machinery", 4, 202, System.Diagnostics.TraceEventType.Information);

        return stream;
    }

// вот код источника данных и вид сетки, который мы используем для отображения того, что мы извлекли из html

<asp:ObjectDataSource ID="CADDrawingsDataSource" runat="server" 
SelectMethod="GetFiles" TypeName="DataAccess.CompressionMachinery" 
FilterExpression="file_type = '{0}' OR 'ALL' = '{0}'">
<FilterParameters>
    <asp:ControlParameter ControlID="rblSearchFileType" Name="file_type" 
        PropertyName="SelectedValue" Type="String" />
</FilterParameters>
<SelectParameters>
    <asp:ControlParameter ControlID="txtPartNumber" DefaultValue="" 
        Name="PartNumber" PropertyName="Text" Type="String" />
</SelectParameters>

<asp:GridView ID="gvCADDrawings" runat="server" AllowPaging="True" 
            AllowSorting="True" DataSourceID="CADDrawingsDataSource" 
            EmptyDataText="No drawings found." PageSize="200" 
            AutoGenerateColumns="False" DataKeyNames="file_name">
            <Columns>
                ...                    
                <asp:TemplateField HeaderText="File Name" SortExpression="file_name">
                    <ItemTemplate>
                        <asp:HyperLink ID="hlFileName" runat="server" Text='<%# Eval("file_name") %>' NavigateUrl='<%# GetUrl(Eval("file_name")) %>'></asp:HyperLink>
                    </ItemTemplate>
                </asp:TemplateField>
                ...
            </Columns>
        </asp:GridView>

// и связанный код

protected string GetUrl(object file_name)
    {
        string url = m_PartNumberUrlPrefix + m_VendorId + "/";
        if (null != file_name)
        {
            string str = (string)file_name;
            string[] stringArray = str.Split('.');
            string partNumber = stringArray[0];
            url += partNumber + m_PartNumberUrlSuffix;
        }
        return url;
    }

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

Любая помощь будет отличной!

1 Ответ

1 голос
/ 07 января 2011

Одним из решений этой проблемы было бы изменение страницы таким образом, чтобы вместо предоставления ссылки на файл она отправляла запрос веб-серверу с информацией о том, какой файл получить, а затем веб-сервер извлекает файл и обслуживает его.до пользователя.

Очевидно, что если пользователь хочет получить доступ к документу для внесения изменений, изменения не будут сохранены в сетевом хранилище, поскольку это будет больше похоже на загрузку, а не на прямое открытие файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...