我有一个usercontrol,它当前读取xml文件中的数据并将其返回给浏览器。 xml文件位于不同的服务器上。代码生成一个动态URL,然后通过GetStream方法将该URL中的xml返回给浏览器。这按预期工作。我现在需要做的是更进一步......返回的数据显示了一个指向html文件的链接列表。这些链接在公司网络内部工作就像打开任何URL一样...但是它们不能在公司网络外部使用防火墙限制b / c。但是我们显然能够显示来自该服务器的数据b / c它可以显示来自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中检索到的内容的数据源和gridview代码
<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文件并将其流式传输到浏览器。只是不太确定如何去做。
任何帮助都会很棒!
答案 0 :(得分:1)
对此的一个解决方案是修改页面,以便不是提供文件的链接,而是向Web服务器发送请求,其中包含有关要获取的文件的信息,然后Web服务器获取文件并提供服务由用户决定。
显然,如果用户希望访问文档进行更改,则更改将不会持久保存到网络存储,因为它更像是下载而不是直接打开文件。