Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 706

Приветствую вас, любители высоких технологий! Вот и очередной выпуск рассылки. За неделю на сайте появилось много новых и интересных материалов, некоторые из которых вы сможете увидеть в этом выпуске.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

Как авторизоваться вконтакте без использования app_id на C#? Устал гуглить, в основном везде примеры с app_id, а старые примеры уже не работают т.к. пару месяцев назад изменился порядок авторизации, узнал только что SID вроде бы в куках находится теперь, а не в request, помогите пожалуйста.

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 24.10.2012 16:34
В статье «Разработка desktop-приложения для «ВКонтакте» на C#» все есть, см. «Авторизация для реальных пацанов». В коде это форма frmSignin4RealGuys.cs, там нужно всего пару изменений внести (url-ы поменять, да удалить код для получения разрешений для приложения):
 private void Signin(object args)
  {
   try
   {
    frmProgress frm = (frmProgress)args;
    // 1. Заходим на страницу авторизации
    frm.SetDescription("Захожу на страницу авторизации.");

    HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create("http://vk.com/");
    HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
    StreamReader myStream = new StreamReader(myResp.GetResponseStream(), Encoding.UTF8);
    string html = myStream.ReadToEnd();

    // дергаем форму авторизации
    Regex myReg = new Regex("<form(.*?)>(?<form_body>.*?)</form>", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);
    if (!myReg.IsMatch(html) || (html = myReg.Match(html).Groups["form_body"].Value) == "")
    {
     MessageBox.Show("Не удалось получить форму авторизации. Проверьте шаблон регулярного выражения.");
     frm.CloseMe();
     return;
    }

    // затем элементы формы
    myReg = new Regex("<input(.*?)name=\"(?<name>[^\x22]+)\"(.*?)((value=\"(?<value>[^\x22]*)\"(.*?))|(.?))>", RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);
    NameValueCollection qs = new NameValueCollection();
    foreach (Match m in myReg.Matches(html))
    {
     string val = m.Groups["value"].Value; // по умолчанию отдаем, то что приняли
     // если нашли поля для ввода логина и пароля, то указываем их
     if (m.Groups["name"].Value == "email")
     {
      val = tbLogin.Text;
     }
     else if (m.Groups["name"].Value == "pass")
     {
      val = tbPassword.Text;
     }
     // добавляем значение в коллекцию
     // в последующем из этой коллекции будут сформированы параметры для запроса авторизации
     qs.Add(m.Groups["name"].Value, HttpUtility.UrlEncode(val));
    }

    // *********************************************************************************************************************
    // 2. Авторизируемся
    frm.SetDescription("Пробую пройти процедуру авторизации.");

    byte[] b = System.Text.Encoding.UTF8.GetBytes(String.Join("&", from item in qs.AllKeys select item + "=" + qs[item]));

    myReq = (HttpWebRequest)HttpWebRequest.Create("https://login.vk.com/?act=login");
    myReq.CookieContainer = new CookieContainer();
    myReq.Method = "POST";
    myReq.ContentType = "application/x-www-form-urlencoded";
    myReq.ContentLength = b.Length;
    myReq.GetRequestStream().Write(b, 0, b.Length);
    myReq.AllowAutoRedirect = false;

    myResp = (HttpWebResponse)myReq.GetResponse();

    // запоминаем куки
    CookieContainer cc = new CookieContainer();
    foreach (Cookie c in myResp.Cookies)
    {
     cc.Add(c);
    }
    // --

    // *********************************************************************************************************************
    // 3. В случае успеха получаем редирект

    if (!String.IsNullOrEmpty(myResp.Headers["Location"]))
    {
     // делаем редирект
     myReq = (HttpWebRequest)HttpWebRequest.Create(myResp.Headers["Location"]);
     myReq.CookieContainer = cc;// передаем куки
     myReq.Method = "GET";
     myReq.ContentType = "text/html";

     myResp = (HttpWebResponse)myReq.GetResponse();
     myStream = new StreamReader(myResp.GetResponseStream(), Encoding.UTF8);
     html = myStream.ReadToEnd();
    }
    else
    {
     // что-то пошло не так
     MessageBox.Show("Ошибка. Ожидался редирект.");
     frm.CloseMe();
     return;
    }

    // смотрим, прошла авторизация или нет
    if (html.IndexOf("Выход") == -1)
    {
     MessageBox.Show("Ошибка: Авторизация не прошла.");
     frm.CloseMe();
     return;
    }
    frm.SetDescription("Авторизация прошла успешно.");

   }
   catch (Exception ex)
   {
    MessageBox.Show("Error. " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
  }

[- к содержанию -]

Ответ #2 @Merlin 24.10.2012 19:03
Пробовал залогиниться с указанием логина и пароля в программе - пишет что не удается авторизоваться. Логин и пароль точно верные, через хром нормально заходит. гифка при ожидании авторизации - зачет!

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 24.10.2012 19:11
У меня проходит нормально. Скачал пример из статьи, открыл код формы frmSignin4RealGuys.cs, вставил код из ответа #1, нажал F5. В программе нажал на кнопку "С указанием логина и пароля в программе". Ввел свой майл и пароль, разрешил программе отправлять сетвые запросы в настройках файрвола. Получил: "Авторизация прошла успешно.". Других телодвижений не делал.

[- к содержанию -]

Ответ #4 @Merlin 24.10.2012 19:55
Был невнимателен, действительно все работает. Спасибо!

[- к содержанию -]

Ответ #5 @Merlin 25.10.2012 00:47
А можете пожалуйста еще пояснить что делает строка
 byte[] b = System.Text.Encoding.UTF8.GetBytes(String.Join("&", from item in qs.AllKeys select item + "=" + qs[item]));
?

ну или хотя бы как то же самое можно сделать, не используя linq (аналог этой строчки в более простых операторах)

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 6 ответов. Смотреть все ответы.
Блаузер @i32 24.10.2012 11:07
Вот интересен вопрос .Если блаузер включен .Не важно на каком сайте.То можно МЫШКУ опредилить? наверно НА ВБхе что то есть.

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 24.10.2012 22:19
Определить координаты мышки в системе из Visual Basic .Net? Вполне возможно.

Вот нашел пример с API, но не проверял:
Imports System
Imports System.Runtime.InteropServices
 
Public Class Mouse
    <DllImport("user32.dll")> _
    Public Shared Function GetMessagePos(
        ByVal arv As Point) As Boolean
    End Function
 
    Public Function x_and_y() As Point
        Dim arv As Point
 
        GetMessagePos(arv)
 
        Return arv
    End Function
End Class

В .Net есть Cursor.Position, но не помню, позволяет это свойство получить глобальные координаты курсора или нет.

[- к содержанию -]

Ответ #2 @Shark1 25.10.2012 02:07
Можно еще так :

(На форме таймер)

Public Class Form1

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Timer1.Enabled = False
    End Sub

    Private Sub Form1_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim i As Point
        i = MousePosition
        Me.Text = i.X & " X " & i.Y
    End Sub
End Class

[- к содержанию -]

Добавить свой ответ в эту тему
Привет всем.
Нужна помощь, не могу написать программу которая будет позволять авторизироватся на сайте (сразу говорю, я в этом деле не селён).
Что бы на форме было 2 textBox-а в первой надо будет ввести логин, а во второй пороль.
Сайт (к примеру http://oblozhki.net/ ).

[- к содержанию -]

Ответ #1 @jj 23.10.2012 16:16
Используем базу данных.
таблица пользователей содержит как минимум 2 поля: "Логин" и "Хэш пароля".
при авторизации выбираем запись из бд, содержащую имя пользователя,
сравниваем хэш введенного пользователем пароля с хэшем из бд.
если запись не найдена или хэш не совпадает, значит авторизация запрещена.

логику можно усложнить, введя в таблицу пользователей поля "Бан" и "Назначенные права"...

[- к содержанию -]

Ответ #2 @Lubot 23.10.2012 16:38
Мне кажится через пост запрос будет легче!?

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 23.10.2012 16:58
В ASP .NET для этого есть Membership.

http://kbyte.ru/ru/Forums/Show.aspx?id=6835

[- к содержанию -]

Ответ #4 @Lubot 23.10.2012 19:44
Нет, вы меня не поняли.
нужно авторизацию под движок vBulletin Version 4.2.
я пытался сделать но не вышло
  private void Form1_Load(object sender, EventArgs e)
  {
   request.Method = "POST";
   request.Host = "http://oblozhki.net/";
   request.KeepAlive = true;
   request.UserAgent = ("Opera/9.80 (Windows NT 6.1; U; Edition Yx; ru) Presto/2.10.289 Version/12.00");
   request.Headers.Add(HttpRequestHeader.AcceptLanguage, ("ru-RU,ru;q=0.9,en;q=0.8"));
   request.Headers.Add(HttpRequestHeader.AcceptEncoding, ("gzip, deflate"));
   request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
   CookieContainer cookie = new CookieContainer();
   request.CookieContainer = cookie;
   request.ContentType = "application/x-www-form-urlencoded";
   string Login = "логин";
   string Password = "пасс";
   string str = "%D0%9F%D0%B0%D1%80%D0%BE%D0%BB%D1%8C&s=";
   string authString = "vb_login_username=" + Login + "&vb_login_password=" + Password + "&vb_login_password_hint=" + str;
   UTF8Encoding encodind = new UTF8Encoding();
   byte[] buffer = encodind.GetBytes(authString);
   Stream newStream = request.GetRequestStream();
   newStream.Write(buffer, 0, authString.Length);
   request.ContentLength = buffer.Length;
   newStream.Close();
  }

  private void button1_Click(object sender, EventArgs e)
  {
   HttpWebResponse response = (HttpWebResponse)request.GetResponse();
   CookieCollection cookies = new CookieCollection();
   cookies = response.Cookies;
   Encoding responseEncoding = Encoding.GetEncoding(response.CharacterSet);
   StreamReader strReader = new StreamReader(response.GetResponseStream(), responseEncoding);
   string htmlText = strReader.ReadToEnd();
   response.Close();
   richTextBox1.Text = htmlText;
  }
может из этого всетаки получится

[- к содержанию -]

Ответ #5 @[i]Pro 23.10.2012 20:19
Не получается, потому что надо MD5 хэш пароля передавать в параметре vb_login_md5password, а не голый пароль (особенности стандартных настроек vBulletin)

Функция хеширования, на шарп особых проблем перевести не должно быть, только строку
SB.Append(B.ToString("x3"))
замени на эту
SB.Append(B.ToString("x2"))

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 12 ответов. Смотреть все ответы.
Всем привет.
Пишу веб-приложение, в одной ветке нужно писать сообщения(похоже как на форуме, блоге...) и в текст сообщения нужно заливать файлы.
Но сейчас нужно сделать хотя бы, что бы заливались картинки.
Ниже Texbox(текст сообщения), добавил Panel(список загруженных картинок), FileUpload + кнопку "Загрузить"
На кнопку "Загрузить", повесил событие загрузки изображения на сервер и в Panel добавляю контрол Image с ImageUrl загруженого изображения.
Вроде бы всё хорошо, но после загрузки следующей картинки, предыдущая пропадает. Это естественно, ведь страница обновляется после клика на кнопку "Загрузить", и ранее программно добавлений контрол Image не сохранился.
Посоветуйте как сделать, чтобы можно было загружать несколько картинок.


Ниже прикрепил скриншот как хочется сделать это в идеале.
Отдельное окно в котором диалоги выбора файлов, а после загрузки ссылка на загруженный файл передается в основное окно.

Но со своим начальным уровнем, не могу до конца понять как это делается.

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 22.10.2012 21:34
WebForms? Там же ViewState есть. Чтобы форма восстанавливалась, нужно добавлять контролы после каждой перезагрузки страницы.

[- к содержанию -]

Ответ #2 @roma_rio 23.10.2012 11:51
Panel (в которую программно добавляю Image контролы, после загрузки изображения) установил принудительно
ViewStateMode="Enabled"
но после загрузки следующего изображения, предыдущий контрол Image все равоно пропадает, хотя текст в Texbox после загрузки изображения остаётся. Сам не пойму почему так...

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 23.10.2012 11:59
ViewStateMode - это лишь часть мозаики.
За сохранение состояния отвечает свойство EnableViewState, по умолчанию оно должно иметь значение True (сохранять состояние).

Нужен код, чтобы точно сказать, что не так.

[- к содержанию -]

Ответ #4 @roma_rio 23.10.2012 13:38
Разметка страницы
<div>
    <h4>
        Добавить новую тему</h4>
    <div class="pnlAddPost">
        <table>
            <tr>
                <td>
                    Заголовок теми:
                </td>
                <td>
                    <asp:TextBox ID="txt_title" runat="server" Width="400px" MaxLength="150"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="TitleRequiredFieldValidator" runat="server" ControlToValidate="txt_title"
                        ErrorMessage="Введите заголовок" ForeColor="Red">*</asp:RequiredFieldValidator>
                </td>
            </tr>
            <tr>
                <td>
                    Категория:
                </td>
                <td>
                    <asp:DropDownList ID="cmb_Category" runat="server" Width="200px">
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td>
                </td>
                <td height="30px">
                    сдесь размещен тулбар-bbcode
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <div>
                        <asp:TextBox ID="txt_text" runat="server" TextMode="MultiLine" Width="700px" Height="200px"></asp:TextBox>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txt_text"
                            ErrorMessage="Введите текст" ForeColor="Red">*</asp:RequiredFieldValidator>
                    </div>
                    
                    <div>
                        
                        <div >
                            <asp:Panel ID="PanelUplImg" runat="server" >
                            </asp:Panel>
                        </div>
                    </div>
                    
                    <div >
                        <asp:Label ID="Label1" runat="server" 
                        Text="Загрузить картинку в текст."
                            ForeColor="Blue" Font-Size="X-Small" Font-Names="Arial"></asp:Label>
                        <asp:FileUpload ID="FileUploadImages" runat="server" CssClass="btn" />
                        &nbsp
                        <asp:Button ID="btn_UploadImages" runat="server" Text="Загрузить" CssClass="btn"
                            OnClick="btn_UploadImages_Click" /><br />
                        <asp:Label ID="lbl_error" runat="server" Font-Size="X-Small" ForeColor="Red"></asp:Label>
                    </div>
                    <div class="DivUplImg">
                        <asp:Label ID="lbl_StatusDownImg" runat="server" 
                            ForeColor="red" Font-Size="X-Small" Font-Names="Arial" Visible="False"></asp:Label>
                    </div>
                </td>
            </tr>
            <tr>
                <td>
                </td>
                <td>
                    <asp:Button ID="btn_SavePost" runat="server" Text=" Создать пост" CssClass="btn"/>
                    <asp:ValidationSummary ID="ValidationSummary1" runat="server" ForeColor="Red" />
                </td>
            </tr>
        </table>
    </div>
    </div>
обработчик кнопки Загрузить
if (!FileUploadImages.HasFile) return;

        string PathOfUplImg = Server.MapPath("pictures") + "//" + FileUploadImages.FileName;
        string UploadFileName = System.IO.Path.GetFileName(FileUploadImages.PostedFile.FileName);
        try
        {
            FileUploadImages.PostedFile.SaveAs(PathOfUplImg);
        }
        catch (HttpException ex)
        {
            lbl_error.Text = ex.Message;
        }
        finally
        {
            lbl_StatusDownImg.Text =
                "Картика " + UploadFileName + 
                " загружена.<br/>Вставте код картинки в текст.";
            lbl_StatusDownImg.Visible = true;

            Image ThumbsUplImg = new Image();
            ThumbsUplImg.ID = UploadFileName;

            ThumbsUplImg.Height = 32;
            ThumbsUplImg.Width = 32;
            ThumbsUplImg.ImageUrl = "~/pictures/" + UploadFileName;
            ThumbsUplImg.ToolTip = "Вставить в текст";
            ThumbsUplImg.Attributes.Add("onclick", "javascript:alert('Я скрипт. Вставляю код картинки в текст')");
            PanelUplImg.Controls.Add(ThumbsUplImg);
        }

[- к содержанию -]

Ответ #5 @Aleksey Nemiro 23.10.2012 15:13
  <h4>
    Добавить новую тему</h4>
  <div class="pnlAddPost">
    <table>
      <tr>
        <td>
          Заголовок теми:
        </td>
        <td>
          <asp:TextBox ID="txt_title" runat="server" Width="400px" MaxLength="150"></asp:TextBox>
          <asp:RequiredFieldValidator ID="TitleRequiredFieldValidator" runat="server" ControlToValidate="txt_title"
            ErrorMessage="Введите заголовок" ForeColor="Red">*</asp:RequiredFieldValidator>
        </td>
      </tr>
      <tr>
        <td>
          Категория:
        </td>
        <td>
          <asp:DropDownList ID="cmb_Category" runat="server" Width="200px">
          </asp:DropDownList>
        </td>
      </tr>
      <tr>
        <td>
        </td>
        <td height="30px">
          сдесь размещен тулбар-bbcode
        </td>
      </tr>
      <tr>
        <td colspan="2">
          <div>
            <asp:TextBox ID="txt_text" runat="server" TextMode="MultiLine" Width="700px" Height="200px"></asp:TextBox>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txt_text"
              ErrorMessage="Введите текст" ForeColor="Red">*</asp:RequiredFieldValidator>
          </div>
          
          <div>
            
            <div >
              <asp:Panel ID="PanelUplImg" runat="server"></asp:Panel>
            </div>
          </div>
          
          <div >
            <asp:Label ID="Label1" runat="server" 
            Text="Загрузить картинку в текст."
              ForeColor="Blue" Font-Size="X-Small" Font-Names="Arial"></asp:Label>
            <asp:FileUpload ID="FileUploadImages" runat="server" CssClass="btn" />
            &nbsp
            <asp:Button ID="btn_UploadImages" runat="server" Text="Загрузить" CssClass="btn"
              OnClick="btn_UploadImages_Click" ValidationGroup="img" /><br />
            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="FileUploadImages" Display="Dynamic"
              ErrorMessage="Необходимо выбрать файл" ForeColor="Red" ValidationGroup="img" />
            <asp:Label ID="lbl_error" runat="server" Font-Size="X-Small" ForeColor="Red"></asp:Label>
          </div>
          <div class="DivUplImg">
            <asp:Label ID="lbl_StatusDownImg" runat="server" 
              ForeColor="red" Font-Size="X-Small" Font-Names="Arial" Visible="False"></asp:Label>
          </div>
        </td>
      </tr>
      <tr>
        <td>
        </td>
        <td>
          <asp:Button ID="btn_SavePost" runat="server" Text=" Создать пост" CssClass="btn"/>
          <asp:ValidationSummary ID="ValidationSummary1" runat="server" ForeColor="Red" />
        </td>
      </tr>
    </table>
  </div>
protected void Page_Load(object sender, EventArgs e)
{
  RestoreForm();
}

protected void btn_UploadImages_Click(object sender, EventArgs e)
{
  if (!FileUploadImages.HasFile) return;

  string PathOfUplImg = Server.MapPath("pictures") + "//" + FileUploadImages.FileName;
  string UploadFileName = System.IO.Path.GetFileName(FileUploadImages.PostedFile.FileName);
  try
  {
    FileUploadImages.PostedFile.SaveAs(PathOfUplImg);
  }
  catch (HttpException ex)
  {
    lbl_error.Text = ex.Message;
  }
  finally
  {
    lbl_StatusDownImg.Text =
      "Картика " + UploadFileName +
      " загружена.<br/>Вставте код картинки в текст.";
    lbl_StatusDownImg.Visible = true;

    Image ThumbsUplImg = new Image();
    ThumbsUplImg.Height = 32;
    ThumbsUplImg.Width = 32;
    ThumbsUplImg.ImageUrl = "~/pictures/" + UploadFileName;
    ThumbsUplImg.ToolTip = "Вставить в текст";
    ThumbsUplImg.Attributes.Add("onclick", "javascript:alert('Я скрипт. Вставляю код картинки в текст')");
    PanelUplImg.Controls.Add(ThumbsUplImg);

    if (Session["Images"] == null) Session["Images"] = new List<string>();
    ((List<string>)Session["Images"]).Add(ThumbsUplImg.ImageUrl);
  }
}

private void RestoreForm()
{
  if (Session["Images"] == null) return;
  foreach (string path in (List<string>)Session["Images"])
  {
    Image ThumbsUplImg = new Image();
    ThumbsUplImg.Height = 32;
    ThumbsUplImg.Width = 32;
    ThumbsUplImg.ImageUrl = path;
    ThumbsUplImg.ToolTip = "Вставить в текст";
    ThumbsUplImg.Attributes.Add("onclick", "javascript:alert('Я скрипт. Вставляю код картинки в текст')");
    PanelUplImg.Controls.Add(ThumbsUplImg);
  }
}

[- к содержанию -]

Добавить свой ответ в эту тему
Приветствую!

Установил на днях Windows 7 x64 (64-битную впервые). На удивление сама винда, драйвера и софт встали без проблем, с первого раза. Все со всеми обновлениями. На первый взгляд все работает нормально. Однако имеют место быть некоторые проблемы с сетью.

Интернет подключен через Wi-Fi роутер. Пробовал и по воздуху и по проводу (через роутер), проблема есть в обоих случаях.
Железо:
Роутер: TP-LINK TL-WR841ND
Сетевой адаптер (в материнке): Qualcomm Atheros AR8161/8165 PCI-E Gigabit Ethernet Controller (NDIS 6.20)
Wi-Fi адаптер (PCI): TP-Link TL-WN751ND
Система:
Windows 7 Pro x64, версия: 6.1.7601, Service Pack 1

Проявление проблемы


1. Изначально странно вел себя QIP, он часто терял подключение и даже падал (молча падал). В журнале событий на этот счет есть следующая запись:
QIP:
Имя сбойного приложения: qip.exe, версия: 4.0.0.7221, отметка времени: 0x2a425e19
Имя сбойного модуля: RPCRT4.dll, версия: 6.1.7601.17514, отметка времени 0x4ce7ba59
Код исключения: 0xc0020043
Смещение ошибки: 0x0005cd99
Идентификатор сбойного процесса: 0xd54
Время запуска сбойного приложения: 0x01cdad2e62f19182
Путь сбойного приложения: C:\Program Files (x86)\QIP 2012\qip.exe
Путь сбойного модуля: C:\Windows\syswow64\RPCRT4.dll
Код отчета: 088d0a58-1923-11e2-bf8a-50465d0541cf
QIP-ом я практически не пользуюсь (висит в онайлен сам по себе), так что просто забил на эту проблему. Тем более, что со временем (через несколько перезагрузок) QIP перестал падать. Частые сообщения об утерянных подключениях остались.

2. Как вы знаете, я иногда занимаюсь веб-программированием под ASP .NET и многие сайты используют SQL Server. SQL Server обычно удаленные, рабочие, стабильные. Запуская сайты в Visual Studio для отладки я чуть ли не на каждый запрос стал получать сообщения ошибках:
Ошибка соединения с SQL Server:
System.Data.SqlClient.SqlException: Ошибка на транспортном уровне при получении результатов с сервера. (provider: Поставщик TCP, error: 0 - Превышен таймаут семафора.)
В некоторых случаях это приводило к падению локального сервера WebDev.WebServer (тот, который в Visual Studio):
Обрушение WebDev.WebServer20.exe:
Имя сбойного приложения: WebDev.WebServer20.exe, версия: 10.0.40219.1, отметка времени: 0x4d5f3456
Имя сбойного модуля: KERNELBASE.dll, версия: 6.1.7601.17932, отметка времени 0x50327672
Код исключения: 0xe053534f
Смещение ошибки: 0x0000c41f
Идентификатор сбойного процесса: 0x%9
Время запуска сбойного приложения: 0x%10
Путь сбойного приложения: %11
Путь сбойного модуля: %12
Код отчета: %13
При этом, работа с удаленной базой через SQL Server Management Studio была более ли менее стабильной. Хотя и она (management studio) иногда возвращала аналогичную ошибку.


3. Когда я стал ковырять эту проблему, периодически вручную проверял обновления системы и софта. Центр обновления Windows выдавал ошибку, что не может проверить обновления.

4. При работе с удаленными рабочими столами (RDP) частенько теряется связь с удаленным сервером.

Других проявлений пока не заметил. Примечательно, что серфинг работает без проблем. Windows не сообщает о потере соединения.
Файрвол проверен, блокировок с его стороны нет.

В Windows XP (со всеми последними обновлениями) подобных проблем замечено не было.

Поиск решения


Сейчас я пересел на провода, т.е. использую интернет через провод, подключенный к роутеру. Wi-Fi адаптер отключен.

В Google на счет таймаута семафора (не путать со светофором) в основном у людей возникают ошибки с USB-устройствами. Попадались темы и SQL Server, но они тоже на прямую не подходят к моим проблемам. Однако, как я понял проблема кроется где-то в сетевом адаптере.

Первое что я сделал, это отключил IPv6 в настройках соединения. Просто мне не нравятся IP-адреса шестой версии После переподключения, проблема себя не проявляла минут 5-10, но потом опять вернулась. В конечном итоге я повырубал все, что можно было и отключил службу «Вспомогательная служба IP».

Каждый раз, отключаясь от сети и вновь подключаясь, проблема себя не проявляла некоторое время, но потом возвращалась.

Далее, я стал ковырять параметры сетевого адаптера.
Сначала увеличил Кадры крупных размеров (MTU) до 9 Кб.

После этого, пытаясь поймать проблему, в какой-то момент я даже начал думать, что проблема решена. Но нет, она опять проявилась.

Затем я подкрутил параметр Масштабирование на стороне прием(ника), переведя его в состояние Включено.

После этого я откровенно запарился тестировать и решил, что все, проблема решена.

Однако нет, не решена. Эти изменения вроде бы просто увеличили время стабильной работы, а может вообще ни на что не повлияли...

Создается ощущение, что где-то что-то забивается и не очищается как положено.

Возможно кто-то с подобным сталкивался или есть человеческая инфа по назначению параметров сетевой карты. Все что я менял - это методом тыка, просто названия понравились :)

Сам буду еще экспериментировать, отпишусь о результатах.

[- к содержанию -]

Ответ #1 @Aleksey Nemiro 20.10.2012 15:12
Изменение скорости и режима дуплекса ни к чему не привело.

В данный момент у меня вообще не работает RDP. Не могу подключиться ни к одному серверу. Если сервер отвечает, то он говорит, что неверный логин и пароль. Хотя все верно, с другого компа подключается нормально. Сомневаюсь, что манипуляции со скоростью дуплекса могли на это повлиять..

Отключил Управление прерываниями - работать стало хуже. Включил обратно.

Изменил Макс. IRQ в секунду с 5 000 до 1 000. Видимых изменений нет. Вернул назад.
Каждый полученный пакет вызывает аппаратное прерывание, что означает,
что текущий процесс, выполняющийся на центральном процессоре сохранен,
и подпрограмма программы обработки прерывания загружена на центральный
процессор, чтобы обработать полученный пакет. После обработки пакета
старый процесс загружается на центральный процессор снова. На системах
с большой нагрузкой такое переключение может занимать уже значительное
время. Используя уменьшение запроса на прерывание (также известное как
управление IRQ) можно подавить прерывание, пока сетевая карта не
заполнит свой буфер, а затем, вызвав прерывание, разом его опустошит.

Управление потоком перевел из Передача и прием включены в Выключено. Стало хоже. Вернул назад. Забавно, что после этого заработал RDP.
Управление потоком IEEE 802.3x обеспечивает функции управления трафиком для режима полного дуплекса. Управление потоком позволяет улучшить работу сетевого адаптера в режиме полного дуплекса с коммутатором. При работе в полном дуплексе (при этом требуется непосредственное подключение к коммутатору) и при угрозе переполнения буфера данных коммутатора, сетевой адаптер получит специальный кадр паузы. Последующий промежуток времени защищает буфер от переполнения и предотвращает потерю данных. Эта технология может улучшить общую производительность сети, предотвращает потерю данных и помогает достичь оптимальной производительности в сети.

История продолжается...

[- к содержанию -]

Ответ #2 @Aleksey Nemiro 20.10.2012 15:15
Скачивание больших файлов по FTP проходит нестабильно. Связь часто теряется.

[- к содержанию -]

Ответ #3 @Aleksey Nemiro 20.10.2012 15:43
Выключение контрольных сумм результатов не дало.

[- к содержанию -]

Ответ #4 @i32 20.10.2012 19:20
Я откликнулся но дело наверно в провайдерах решать...(спрошу у своих) завтра...

[- к содержанию -]

Ответ #5 @Aleksey Nemiro 20.10.2012 20:18
Провайдер - вряд ли, я ведь не единственный пользователь с Windows 7 x64. Хотя раньше сидел на Windows XP, но вряд ли провайдер об этом знает..
Кстати, провайдер Interzet.

Удалил драйвера сетевухи, поставил заново. Не помогло. Из-за сброса настроек чуть ли не все SQL-соединения валились.
Сейчас перепрошил роутер. Сначала чуть не убил его, потом искал свой MAC-адрес

Пока тестю, поспешных выводов делать не буду. Но радует, что пока падения не было, при том что настройки сетевой карты остались дефолтными.

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 6 ответов. Смотреть все ответы.

Все темы и обсуждения

Вакансии в IT

Программист

Россия, Москва | Работа в офисе

Инженер-программист (С++)

Россия, Москва | Работа в офисе | 40 000.00 KBP

Инженер-программист

Россия, Москва | Работа в офисе | 37 000.00 KBP

Программист

Россия, Москва | Работа в офисе | 50 000.00 KBP

Программист

Россия, Москва | Работа в офисе | 60 000.00 KBP

Инженер-программист (С++)

Россия, Москва | Работа в офисе | 40 000.00 KBP

Программист

Россия, Москва | Работа в офисе | 100 000.00 KBP

Программист

Россия, Москва | Работа в офисе

Инженер - программист (С++)

Россия, Москва | Работа в офисе | 40 000.00 KBP

Программист

Россия, Москва | Работа в офисе | 30 000.00 KBP

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Представлен 13-дюймовый MacBook Pro с экраном Retina

Компания Apple представила ноутбук MacBook Pro с 13-дюймовым экраном Retina. Ноутбук весит 1,58 килограмма и насчитывает в толщину 1,9 сантиметра. Он комплектуется процессором Intel Core i5 или i7 и располагает 8 гигабайтами оперативной памяти. Компьютер будет стоить от 1699 долларов США.

25.10.2012 10:36 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

В Рунете появился специализированный антифишинговый проект

Центр быстрого реагирования на инциденты информационной безопасности CERT-GIB сегодня запускает проект Antiphishing.ru, цель которого заключается в противодействии таким киберугрозам, как фишинг и распространение вредоносных программ. Ключевая особенность проекта состоит в том, что вся информация о нарушениях будет поступать непосредственно от интернет-пользователей и использоваться для дальнейшего привлечения компьютерных злоумышленников к ответственности.

В связи с широким распространением фишинговых ресурсов в сети Интернет, в том числе и в его российском сегменте, проект Antiphishing.ru был разработан для оперативного сбора и обработки информации о любом сайте, который вызывает у пользователей какие-либо подозрения. Проект был реализован специалистами центра реагирования CERT-GIB при участии таких компаний, как Яндекс, Web of Trust и Mail.Ru Group. Данная инициатива нашла поддержку со стороны Координационного центра доменов RU/РФ.

CERT-GIB является центром круглосуточного реагирования на инциденты информационной безопасности, созданный на базе компании Group-IB. В настоящий момент команде CERT-GIB присвоен статус компетентной организации при Координационном центре национального домена сети Интернет, который является администратором национальных доменов верхнего уровня .RU и .РФ. В соответствии с заключенным соглашением CERT-GIB уполномочен осуществлять оперативное противодействие незаконному использованию доменных имен в зонах .RU и .РФ в целях фишинга, несанкционированного доступа в информационные системы третьих лиц, распространения вредоносных программ и управления вредоносными программами (бот-сетями).

Технически, Antiphishing.ru представляет собой веб-интерфейс для передачи пользовательских обращений. Для инициирования проверки любому интернет-пользователю, который предполагает, что столкнулся с вредоносным сайтом, достаточно всего лишь загрузить URL или IP-адрес подозрительного ресурса. После этого в автоматическом режиме осуществляется сбор дополнительной информации, которая, в свою очередь, подвергается тщательной обработке. На основании проведенного анализа выносится решение о применении соответствующих мер в отношении того или иного ресурса. Кроме того, вся собранная информация о вредоносных ресурсах и использовавших их злоумышленников будет передаваться в правоохранительные органы для привлечения нарушителей к ответственности.

«Координационный центр уделяет большое внимание обеспечению безопасности российских интернет-пользователей, и проект Antiphishing.ru — еще один способ сделать Интернет чище. Важно, что в этом проекте могут принять участие все интернет-пользователи: такой подход позволяет обнаружить больше вредоносных ресурсов и тем самым качественно улучшить борьбу с компьютерными мошенниками», — говорит Андрей Колесников, директор Координационного центра доменов .RU/.РФ.

Для тех пользователей, которые обладают целым списком подозрительных сайтов, предоставляется возможность массовой регистрации записей — надо лишь нажать на кнопку «Добавить много ссылок» под строкой ввода. Кроме того, любой может зарегистрироваться и участвовать в состязании среди «антифишеров», лучшие из которых будут поощряться ценными призами. Все действия пользователей находят свое отражение в подробном разделе «Статистика».

«Мы рады, что в Рунете появился специализированный антифишинговый проект. Безопасность очень важна для Яндекса, и мы постоянно работаем над тем, чтобы мошеннические сайты, и прежде всего фишинговые, не вредили релевантности поиска и нашим пользователям, — комментирует Денис Рогачевский, менеджер проектов Яндекса. — Информацию о таких сайтах мы готовы предоставить всем партнерам, заинтересованным в чистоте экосистемы, в частности через наш Safe Browsing API».

25.10.2012 10:35 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

Вредоносный спам от имени Amazon ведет к заражению троянцами

Компания «Доктор Веб» предупредила о широком распространении с 22 октября 2012 года вредоносного спама якобы от популярного интернет-магазина Amazon.com. Эти письма содержат предложение загрузить лицензию на Microsoft Windows, однако, переходя по ссылке, пользователь заражается сразу двумя вредоносными программами - Trojan.Necurs.97 и BackDoor.Andromeda.22, которые готовы в любой момент по заказу злоумышленников переправить на компьютеры жертв другое вредоносное ПО.

С 22 октября 2012 года пользователи Интернета стали регулярно получать по электронной почте сообщения, отправителем которых якобы является интернет-магазин Amazon.com. Письма имеют заголовок Order N [случайное число] и следующее содержимое:

Hello,
You can download your Microsoft Windows License here.
Microsoft Corporation

Каждое такое сообщение содержит ссылку на веб-страницу, включающую сценарий, при выполнении которого посетитель переадресовывается на другой веб-сайт. В свою очередь этот сайт передает браузеру файл, содержащий сценарий на языке JavaScript, при выполнении которого на компьютер пользователя загружаются две вредоносные программы: широко известный троянец-загрузчик BackDoor.Andromeda.22 и вредоносная программа Trojan.Necurs.97.

Троянец Trojan.Necurs.97 обладает способностью к саморазмножению, в том числе может инфицировать съемные накопители и общие ресурсы локальной сети. После своего запуска троянец создает в отдельной папке исполняемый файл, а также вносит изменения в системный реестр с целью обеспечить автоматический запуск данного файла в процессе загрузки Windows. После этого троянец ищет в памяти запущенные процессы браузеров Internet Explorer и Mozilla Firefox и в случае их обнаружения пытается встроить в них собственный код. Затем Trojan.Necurs.97 пытается скопировать себя на все доступные в системе съемные носители, сохраняя на них собственную копию под случайным именем, после чего создает в корневой папке накопителя файл autorun.inf с целью обеспечения автоматического запуска троянца при каждом подключении устройства.

Троянец Trojan.Necurs.97 устанавливает соединение с принадлежащими злоумышленникам удаленными серверами, сообщает об успешной установке в инфицированную систему и ожидает поступления команд, среди которых можно отметить команду загрузки на зараженный компьютер различных приложений и передачу на удаленный сервер файлов с локального компьютера.

25.10.2012 10:35 · Категория: Безопасность · Источник: CyberSecurity.ru

[- к содержанию -]

В Японии представлен сервис перевода телефонных разговоров

Оператор NTT Docomo 1 ноября запустит сервис автоматического перевода разговоров по телефону. Чтобы пообщаться с иноязычным собеседником, пользователю потребуется смартфон на Android с установленным приложением-переводчиком. Поддерживаются японский, английский, корейский и китайский языки.

23.10.2012 11:28 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Samsung перестанет поставлять Apple экраны

Samsung в 2013 году перестанет поставлять Apple ЖК-панели, сообщил источник в южнокорейской компании. По его словам, сотрудничество с Купертино стало невыгодным для Samsung. В первой половине 2012 года Samsung являлась крупнейшим поставщиком экранов для мобильных устройств Apple.
23.10.2012 08:34 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное