需要使用“GetStream”类型的方法来显示html页面

时间:2011-01-07 19:25:19

标签: c# filestream webusercontrol

我有一个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文件并将其流式传输到浏览器。只是不太确定如何去做。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

对此的一个解决方案是修改页面,以便不是提供文件的链接,而是向Web服务器发送请求,其中包含有关要获取的文件的信息,然后Web服务器获取文件并提供服务由用户决定。

显然,如果用户希望访问文档进行更改,则更改将不会持久保存到网络存储,因为它更像是下载而不是直接打开文件。