<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=ASP.NET_Tutorial%2FDevelopment%2FWebClient</id>
		<title>ASP.NET Tutorial/Development/WebClient - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=ASP.NET_Tutorial%2FDevelopment%2FWebClient"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=ASP.NET_Tutorial/Development/WebClient&amp;action=history"/>
		<updated>2026-04-29T20:03:12Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=ASP.NET_Tutorial/Development/WebClient&amp;diff=2573&amp;oldid=prev</id>
		<title> в 15:30, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=ASP.NET_Tutorial/Development/WebClient&amp;diff=2573&amp;oldid=prev"/>
				<updated>2010-05-26T15:30:57Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:30, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=ASP.NET_Tutorial/Development/WebClient&amp;diff=2574&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=ASP.NET_Tutorial/Development/WebClient&amp;diff=2574&amp;oldid=prev"/>
				<updated>2010-05-26T11:56:20Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== asynchronous page downloading==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;%@ Page Async=&amp;quot;true&amp;quot; Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; &lt;br /&gt;
    Inherits=&amp;quot;Default&amp;quot; Trace=&amp;quot;true&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Async pages&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;div id=&amp;quot;pageContent&amp;quot;&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
            &amp;lt;% = rssData %&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
File: Default.aspx.cs&lt;br /&gt;
using System;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System.Web.UI;&lt;br /&gt;
using System.Web.UI.WebControls;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Xml;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Xml.XPath;&lt;br /&gt;
&lt;br /&gt;
public partial class Default : System.Web.UI.Page&lt;br /&gt;
{&lt;br /&gt;
    const string RSSFEED = &amp;quot;http://weblogs.asp.net/despos/rss.aspx&amp;quot;;&lt;br /&gt;
    private WebRequest req;&lt;br /&gt;
    public string rssData;&lt;br /&gt;
    protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        AddOnPreRenderCompleteAsync(&lt;br /&gt;
            new BeginEventHandler(BeginTask),&lt;br /&gt;
            new EndEventHandler(EndTask));&lt;br /&gt;
    }&lt;br /&gt;
    IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)&lt;br /&gt;
    {&lt;br /&gt;
        Trace.Warn(&amp;quot;Begin async: Thread=&amp;quot; + &lt;br /&gt;
                    Thread.CurrentThread.ManagedThreadId.ToString());&lt;br /&gt;
        req = WebRequest.Create(RSSFEED);&lt;br /&gt;
        return req.BeginGetResponse(cb, state);&lt;br /&gt;
    }&lt;br /&gt;
    void EndTask(IAsyncResult ar)&lt;br /&gt;
    {&lt;br /&gt;
        string text;&lt;br /&gt;
        using (WebResponse response = req.EndGetResponse(ar))&lt;br /&gt;
        {&lt;br /&gt;
            StreamReader reader;&lt;br /&gt;
            using (reader = new StreamReader(response.GetResponseStream()))&lt;br /&gt;
            {&lt;br /&gt;
                text = reader.ReadToEnd();&lt;br /&gt;
            }&lt;br /&gt;
            rssData = ProcessFeed(text);&lt;br /&gt;
        }&lt;br /&gt;
        Trace.Warn(&amp;quot;End async: Thread=&amp;quot; + &lt;br /&gt;
                    Thread.CurrentThread.ManagedThreadId.ToString());&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    string ProcessFeed(string feed)&lt;br /&gt;
    {&lt;br /&gt;
        StringBuilder sb = new StringBuilder();&lt;br /&gt;
        XmlDocument doc = new XmlDocument();&lt;br /&gt;
        doc.LoadXml(feed);&lt;br /&gt;
        XPathNavigator nav = doc.CreateNavigator();&lt;br /&gt;
        XPathNodeIterator iterator;&lt;br /&gt;
        iterator = nav.Select(&amp;quot;/rss/channel/title&amp;quot;);&lt;br /&gt;
        iterator.MoveNext();&lt;br /&gt;
        sb.AppendFormat(&amp;quot;&amp;lt;h3&amp;gt;{0}&amp;lt;/h3&amp;gt;&amp;quot;, iterator.Current.Value);&lt;br /&gt;
        iterator = nav.Select(&amp;quot;/rss/channel/description&amp;quot;);&lt;br /&gt;
        iterator.MoveNext();&lt;br /&gt;
        sb.AppendFormat(&amp;quot;&amp;lt;i&amp;gt;{0}&amp;lt;/i&amp;gt;&amp;quot;, iterator.Current.Value);&lt;br /&gt;
        XmlNodeList items = doc.SelectNodes(&amp;quot;/rss/channel/item&amp;quot;);&lt;br /&gt;
        sb.Append(&amp;quot;&amp;lt;ul&amp;gt;&amp;quot;);&lt;br /&gt;
        foreach (XmlNode n in items)&lt;br /&gt;
        {&lt;br /&gt;
            XmlNode title = n.SelectSingleNode(&amp;quot;title&amp;quot;);&lt;br /&gt;
            XmlNode link = n.SelectSingleNode(&amp;quot;link&amp;quot;);&lt;br /&gt;
            XmlNode date = n.SelectSingleNode(&amp;quot;pubDate&amp;quot;);&lt;br /&gt;
            sb.AppendFormat(&amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;{0}\&amp;quot;&amp;gt;{1}&amp;lt;/a&amp;gt; on {2}&amp;lt;/li&amp;gt;&amp;quot;, link.InnerText, title.InnerText, date.InnerText);&lt;br /&gt;
        }&lt;br /&gt;
        sb.Append(&amp;quot;&amp;lt;/ul&amp;gt;&amp;quot;);&lt;br /&gt;
        return sb.ToString();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Read page header==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;ScrapeHeadings&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;title&amp;gt;Scraping Headings&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;asp:Panel ID=&amp;quot;panUrl&amp;quot; runat=&amp;quot;server&amp;quot; GroupingText=&amp;quot;Search&amp;quot; CssClass=&amp;quot;myPanel&amp;quot;&amp;gt;&lt;br /&gt;
         Enter Url:&lt;br /&gt;
         &amp;lt;asp:TextBox ID=&amp;quot;txtUrl&amp;quot; runat=&amp;quot;server&amp;quot; Columns=&amp;quot;50&amp;quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
         &amp;lt;asp:Button ID=&amp;quot;btnSearch&amp;quot; runat=&amp;quot;server&amp;quot; OnClick=&amp;quot;btnSearch_Click&amp;quot; Text=&amp;quot;Search&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;
      &lt;br /&gt;
      &lt;br /&gt;
      &amp;lt;asp:Panel ID=&amp;quot;panHeadings&amp;quot; &lt;br /&gt;
                 runat=&amp;quot;server&amp;quot; &lt;br /&gt;
                 GroupingText=&amp;quot;Headings in this Url&amp;quot; &lt;br /&gt;
                 CssClass=&amp;quot;myPanel&amp;quot; &amp;gt;&lt;br /&gt;
         &amp;lt;asp:Literal ID=&amp;quot;litContent&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File: Default.aspx.cs&lt;br /&gt;
using System;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Configuration;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System.Web.Security;&lt;br /&gt;
using System.Web.UI;&lt;br /&gt;
using System.Web.UI.WebControls;&lt;br /&gt;
using System.Web.UI.WebControls.WebParts;&lt;br /&gt;
using System.Web.UI.HtmlControls;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Text.RegularExpressions;&lt;br /&gt;
public partial class ScrapeHeadings : System.Web.UI.Page&lt;br /&gt;
{&lt;br /&gt;
   protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
   {&lt;br /&gt;
     litContent.Text = &amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   protected void btnSearch_Click(object sender, EventArgs e)&lt;br /&gt;
   {&lt;br /&gt;
      try&lt;br /&gt;
      {&lt;br /&gt;
         WebClient client = new WebClient();&lt;br /&gt;
         string content = client.DownloadString(txtUrl.Text);&lt;br /&gt;
         Regex reg = new Regex(@&amp;quot;&amp;lt;h\d&amp;gt;.+&amp;lt;/h\d&amp;gt;&amp;quot;, RegexOptions.IgnoreCase);&lt;br /&gt;
         MatchCollection mc = reg.Matches(content);&lt;br /&gt;
         foreach (Match m in mc)&lt;br /&gt;
         {&lt;br /&gt;
            litContent.Text += HttpUtility.HtmlEncode(m.Value) + &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      catch&lt;br /&gt;
      {&lt;br /&gt;
         litContent.Text = &amp;quot;Could not connect to &amp;quot; + txtUrl.Text;&lt;br /&gt;
      }      &lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Retrieve web page==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;GetBookImage&amp;quot; %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.1//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Untitled Page&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form id=&amp;quot;form1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
File: Default.aspx.cs&lt;br /&gt;
using System;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Configuration;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System.Web.Security;&lt;br /&gt;
using System.Web.UI;&lt;br /&gt;
using System.Web.UI.WebControls;&lt;br /&gt;
using System.Web.UI.WebControls.WebParts;&lt;br /&gt;
using System.Web.UI.HtmlControls;&lt;br /&gt;
using System.Text.RegularExpressions;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.IO;&lt;br /&gt;
public partial class GetBookImage : System.Web.UI.Page&lt;br /&gt;
{&lt;br /&gt;
    protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
    FindBook findBook = new FindBook();&lt;br /&gt;
    Response.Redirect(findBook.GetImageUrl(Request.QueryString[&amp;quot;isbn&amp;quot;]));&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class FindBook&lt;br /&gt;
{&lt;br /&gt;
  public string GetImageUrl(string isbn)&lt;br /&gt;
  {&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
      isbn = isbn.Replace(&amp;quot;-&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
      string bookUrl = &amp;quot;http://www.amazon.ru/exec/obidos/ASIN/&amp;quot; + isbn;&lt;br /&gt;
      string bookHtml = GetWebPageAsString(bookUrl);&lt;br /&gt;
      string imgTagPattern = &amp;quot;&amp;lt;img src=\&amp;quot;(http://images.amazon.ru/images/P/&amp;quot; + isbn + &amp;quot;[^\&amp;quot;]+)\&amp;quot;&amp;quot;;&lt;br /&gt;
      Match imgTagMatch = Regex.Match(bookHtml, imgTagPattern);&lt;br /&gt;
      return imgTagMatch.Groups[1].Value;&lt;br /&gt;
    }&lt;br /&gt;
    catch&lt;br /&gt;
    {&lt;br /&gt;
      return &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public string GetWebPageAsString(string url)&lt;br /&gt;
  {&lt;br /&gt;
    WebRequest requestHtml = WebRequest.Create(url);&lt;br /&gt;
    WebResponse responseHtml = requestHtml.GetResponse();&lt;br /&gt;
    StreamReader r = new StreamReader(responseHtml.GetResponseStream());&lt;br /&gt;
    string htmlContent = r.ReadToEnd();&lt;br /&gt;
    r.Close();&lt;br /&gt;
    return htmlContent;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Trigger Batch Compile==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Text;&lt;br /&gt;
class TriggerBatchCompile {&lt;br /&gt;
private static string[] urls = {&lt;br /&gt;
&amp;quot;http://localhost/page.aspx&amp;quot;,&lt;br /&gt;
&amp;quot;http://localhost/anotherApplication/page.aspx&amp;quot;,&lt;br /&gt;
&amp;quot;http://localhost/yetAnotherApplication/page.aspx&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
    public static void Main(string[] args) {&lt;br /&gt;
        WebResponse result = null;&lt;br /&gt;
        for(int i = 0; i &amp;lt; urls.Length; i++) {&lt;br /&gt;
            try {&lt;br /&gt;
                Console.WriteLine(urls[i]);&lt;br /&gt;
                WebRequest request = WebRequest.Create(urls[i]);&lt;br /&gt;
                result = request.GetResponse();&lt;br /&gt;
                Stream receiveStream = result.GetResponseStream();&lt;br /&gt;
                StreamReader streamReader = new StreamReader(receiveStream);&lt;br /&gt;
                char[] read = new Char[256];&lt;br /&gt;
                int count = streamReader.Read( read, 0, 256 );&lt;br /&gt;
                while (count &amp;gt; 0) {&lt;br /&gt;
                    count = streamReader.Read(read, 0, 256);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            catch(Exception e) {&lt;br /&gt;
                Console.WriteLine(e);&lt;br /&gt;
            } &lt;br /&gt;
            finally {&lt;br /&gt;
                if ( result != null ) {&lt;br /&gt;
                    result.Close();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>