2011-01-07 6 views
0

現在、xmlファイルからブラウザにデータを読み込んで返すusercontrolがあります。 xmlファイルは別のサーバーにあります。コードは動的URLを生成し、GetStreamメソッドを介してそのURLからxmlをブラウザに返します。これは期待どおりに動作します。私が今できる必要があるのは、それを一歩前進させることです。返されたデータには、htmlファイルへのリンクのリストが表示されます。これらのリンクは、URLを開くのと同じように企業ネットワーク内で動作しますが、ファイアウォール制限の企業ネットワーク外からは機能しません。しかし、私たちは明らかにそのサーバからのデータを表示する能力を持っています.xmlファイルからのデータを表示することができます。これはhtmlファイルと同じ場所/サーバにあります。では、ユーザーがこれらのリンクの1つをクリックすると、どのようにhtmlデータを表示するのですか?htmlページを表示するために "GetStream"タイプのメソッドを使用する必要があります

は、ここでは、これまで持っているものです。

// 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

GetStreamメソッドが表示されていないことに気づいていますか?これは.NETやC#の一部ではありません。また、XMLファイルにリンクのリストが表示されていますか? –

+0

Johnさん、ありがとうございますGetStreamメソッドは次のとおりです: – PushCode

+0

public static Stream GetStream(string uri) { HttpWebRequest request =(HttpWebRequest)WebRequest.Create(uri); HttpWebResponse response =(HttpWebResponse)request.GetResponse(); ストリームストリーム= response.GetResponseStream(); Logger.Write( "CompressionMachinery.GetStream( '" + uri + "')"、 "Machinery"、4,202、System.Diagnostics.TraceEventType.Information)からの応答ストリームを取得しました。 戻りストリーム。 } – PushCode

答えて

1

これを解決する方法の1つは、ファイルへのリンクを提供する代わりに、取得するファイルに関する情報をWebサーバーに送信してから、Webサーバーがファイルを取得して配信するようにページを変更することですそれはユーザーまでです。

変更を加えるためにユーザーがドキュメントにアクセスしようとしている場合は、直接ファイルを開くのではなく、ダウンロードのように動作するため、変更がネットワークストアに保存されないことは明らかです。

+0

アダム、あなたは正しい道にいると思う。しかし、リンクは残っていなければならないので、これはWebサーバーにリクエストを送信し、htmlを表示する新しいページである必要があります。私の問題は、私はそれをする方法を知らない!ユーザーはhtmlを表示するだけで、変更はしないので、そこにはうまくいきます。 – PushCode