| На этой страничке, я расскажу об одной маленькой хитрости - как можно показать на своей страничке всякие полезные счетчики - либо аналогичные Spylog/Liveinternet либо еще более полезные какие-то свои собственные счетчики. Кроме того, получение нормальных отчетов по счетчикам Spylog/Liveinternet платное. Программисту тупо платить даже $50 в месяц за какие-то там отчеты, которые можно и самому выпустить элементарно по своим собственным данным в своей собственной базе. |
Основная проблема при показе счетчика, чтобы браузер сам включил в текст странички счетчик прямо на клиенте. Для этого есть множество причин:
Следовательно, счетчики должны включаться непосредственно в HTML-код отрабатыватся именно на стороне клиента - в браузере. Вопрос заключается в том, как это сделать. Для этого существуют три пути:
<img border="0" src="http://forum.vb-net.ru/GetTopicCount.ashx?id=11BA946C-3194-4FDF-B1DD-238EC837A0F4" />
Теперь я покажу свой код хандлера GetTopicCount.ashx, который формирует картинку с изображением счетчика комментариев. Более сложные картинки, такие как Spylog/Liveinternet/mail.ru/meteonova изготавливаются ровно точно так же, за исключением того, что у них в объекте Drawing.Graphics рисуется что-то еще, а у меня в этом коде рисуется командой G.DrawString лишь одна строка с текстом:
1: <%@ WebHandler Language="VB" Class="GetTopicCount" %>
2:
3: Imports System
4: Imports System.Web
5:
6: Public Class GetTopicCount : Implements IHttpHandler
7: Dim ImageHeigth As Integer = 10
8: Dim ImageWidth As Integer = 10
9:
10: Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
11: context.Response.ContentType = "image/gif"
12: Dim X As New Drawing.Bitmap(ImageWidth + 10, ImageHeigth)
13: Dim G As Drawing.Graphics = Drawing.Graphics.FromImage(X)
14: 'background-color:#FDF5E6;
15: G.Clear(System.Drawing.Color.FromArgb(Convert.ToInt32("FD", 16), Convert.ToInt32("F5", 16), Convert.ToInt32("E6", 16)))
16: Try
17: If context.Current.Request.QueryString("id") IsNot Nothing Then
18: If context.Current.Request.QueryString("id") <> "" Then
19: Dim TopicGuid As Guid
20: TopicGuid = New Guid(context.Current.Request.QueryString("id"))
21: 'есть параметр и он ГУИД
22: Dim CN As New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("SQLServer_ConnectionStrings").ConnectionString)
23: CN.Open() 'здесь иногда валится по таймауту или из-за исчерпания пула подключений (задаются Max Pool Size в коннекшн-стринге)
24: Dim CMD1 As New System.Data.SqlClient.SqlCommand("select count(*) as TOPIC_COUNT from forum with (nolock) where ToTopic = '" & TopicGuid.ToString & "'", CN)
25: Dim TOPIC_COUNT As Integer = CMD1.ExecuteScalar
26: CN.Close()
27: G.DrawString(TOPIC_COUNT.ToString, New Drawing.Font("", ImageHeigth, Drawing.FontStyle.Regular, Drawing.GraphicsUnit.Pixel), Drawing.Brushes.Blue, 0, -2)
28: Else
29: G.DrawString("000", New Drawing.Font("", ImageHeigth, Drawing.FontStyle.Regular, Drawing.GraphicsUnit.Pixel), Drawing.Brushes.Blue, 0, -2)
30: End If
31: Else
32: G.DrawString("000", New Drawing.Font("", ImageHeigth, Drawing.FontStyle.Regular, Drawing.GraphicsUnit.Pixel), Drawing.Brushes.Blue, 0, -2)
33: End If
34: Catch ex As Exception
35: G.DrawString("000", New Drawing.Font("", ImageHeigth, Drawing.FontStyle.Regular, Drawing.GraphicsUnit.Pixel), Drawing.Brushes.Blue, 0, -2)
36: End Try
37: X.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif)
38: End Sub
39:
40: Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
41: Get
42: Return False
43: End Get
44: End Property
45:
46: End Class
Вы легко сможете преобразовать этот код для изготвления более сложного информера. В моем коде ID идентифицирует конкретную страничку моего сайта, вы можете им идентифицировать не только страничку, но и клиента.
Точно таким же кодом формируются не только всевозможные счетчики и информеры, но и капчи, которыми удостоверяются кто именно пытается логинится в сайт - робот или человек. Например такие как капчи, которые вы видите user.votpusk.ru, asp-net.ru, terminal.gisis.ru или любые другие.
А вот для того, чтобы программист не чуствовал себя идиотом, который платит не за что - можно отчеты, которые создают счетчики Spylog/Liveinternet/mail/yandex - создавать самому. Для этого всего-навсего необходимо в этом хандлере счетчика добавить две-три строчки, которые положат в базу любой из параметров, которые приносит с собой браузер или определяет драйвер IIS. А потом выпустить любой нужный вам отчет уже по данным в своей базе:

Для просмотра параметров WebRequest'а я создал публичный сервис : http://asp-net.ru/RequestTest.ashx, которым вы тоже можете воспользоваться. С ппмощью этого сервиса интернет-серферы могут посмотреть какие параметры приносит их браузер на любой Web-сервер, а программисты могут отобрать интересущие параметры для сохранения себе в базу для дальнейшего формирования по этим сведениям отчетов. (В принципе таких публичных сервисов у меня создано достаточно много, например здесь Шлюзы к платежным системам интернет-денег я описал технику применения похожего сервиса http://asp-net.ru/PostTest.ashx.)
| <На главную> <В раздел ASP> <В раздел NET> <В раздел SQL> <В раздел Разное> <Написать автору> < Поблагодарить> |