У меня есть 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-файлом, и передать его в браузер. Просто не совсем уверен, как это сделать.
Любая помощь будет отличной!