Подключиться к интернету

Тема в разделе ".NET", создана пользователем f.7, 10 окт 2007.

  1. f.7

    f.7 Гость

    Добрый день всем, проблемка значит такая - у нас инет всем раздается через сервак, на серваке настроено соединение по ADSL, бывают такие моменты что соедениние обрывается, и очень достало лазить ручками и коннектить опять, было принято решение написать сервис который будет проверять есть ли инет и если нет, то коннектить. Собственно вопрос как мне программно законектится к инету(а также дисконектить его), и как лучше всего проверять есть ли инет?
    я сначала решил проверять инет с помощью этого
    Код (Text):
    System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
    но тогда надо будет ставить таймер, а это наверное не лучшее решение проблемы, подскажите пожалуйста как лучше всего переодически проверять есть ли интернет и как запускать соединение.
    И ещё маленький вопросик, как может сервис(Windows) рестартануть сам себя?
     
  2. Pasha

    Pasha Гость

    Для: f.7
    Подпишись на эвенты класса System.Net.NetworkInformation.NetworkChange.
     
  3. f.7

    f.7 Гость

    Вот нашел
    Gotdotnet.ru
    даже работает, но как всегда проблема с этими долбаными винсервисами, пишу эту кадяру в консольном приложении - работает, как только это всё дело пишу в винсервисе - наотрез отказывается работать :D
     
  4. f.7

    f.7 Гость

    народ подскажите хоть какую идею, я уже целый день пытаюсь запустить сервис, может галочку какую ещё надо поставить, или ещё что нить. У этих гр*цензура*ых винсервисах всё время какие-то траблы...... :D
     
  5. f.7

    f.7 Гость

    Для: sax_ol
    дык в этом и дело что оно совершенно никаких ошибок не выдает, просто не пашит, могу рассказать как это всё делаю,(кодяру ниже покажу)
    - создаю приложение винсервис
    - там пишу класс(Dialer2) для открытия и закрытия интернет соеденения
    - при OnStart сервиса создаю обект Dialer2 и вызываю функцию для соеденения
    - потом к сервису добавляю serviceInstaller1 в свойстве которого указываю StartType:automatic(чтобы сервис запускался сам)
    - потом добавляю serviceProcessInstaller1 где в свойстве пишу Account:LocalSystem(чтобы сервис запускался от имени системы)
    - далее к решению добавляю Setup Project, и тут указываю что надо инсталировать сервис
    - инсталирую сервис, захожу в сервисы и на вкладке Log On ставлю птичку Allov Service to interact with desktop
    - далее запускаю сервис и....... горько плачу от того что ничего не пашет :)
    (этот метод написания сервиса я взял из примера MSDN)
    Если есть идеии что не так инсталируется или что-то такое, то сразу отметаю эти идеи, так как я на
    OnStart() сервиса ставил кодяру по созданию файла, и при запуске он создавался нормально, тоесть сервис создается нормально и OnStart() прекрастно работает, но почемуто он не хочет выполнять некоторые команды, я почти уверен что если бы мне просто надо было запустить exe с помощью Process, то результат был бы тотже(тоесть exe не заработало).
    Я предпологаю что я где-то какую-то галочку не поставил вот и всё :(
    код Dialer2
    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;

    namespace DialerConsole
    {
    public class Dialer2
    {
    private Int32 nConnection = new int();
    public void Dial()
    {
    int nResult = InternetDial(IntPtr.Zero, "ADSL", (int)InternetDialFlags.INTERNET_DIAL_UNATTENDED, ref nConnection, 0);
    }

    public void DisConnect()
    {
    InternetHangUp(nConnection, 0);
    }

    [DllImport("Wininet.dll")]
    private static extern Int32 InternetDial(IntPtr hwndParent, string lpszConnectoid, Int32 dwFlags, ref Int32 lpdwConnection, Int32 dwReserved);
    const int MAX_PATH = 260;
    const int RAS_MaxEntryName = 256;

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    struct RASENTRYNAME
    {
    public int dwSize;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)]
    public string szEntryName;
    public int dwFlags;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH + 1)]
    public string szPhonebook;
    }

    [DllImport("rasapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern uint RasEnumEntries(IntPtr reserved, IntPtr lpszPhonebook, [In, Out] RASENTRYNAME[] lprasentryname, ref int lpcb, ref int lpcEntries);
    [DllImport("wininet.dll", SetLastError = true)]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool InternetCloseHandle(IntPtr hInternet);

    [DllImport("wininet.dll", SetLastError = true)]
    static extern int InternetHangUp(int Connection, int ReservedValue);

    [Flags]
    enum InternetConnectionState : int
    {
    INTERNET_CONNECTION_MODEM = 0x1,
    INTERNET_CONNECTION_LAN = 0x2,
    INTERNET_CONNECTION_PROXY = 0x4,
    INTERNET_RAS_INSTALLED = 0x10,
    INTERNET_CONNECTION_OFFLINE = 0x20,
    INTERNET_CONNECTION_CONFIGURED = 0x40
    }

    [Flags]
    enum InternetDialFlags
    {
    INTERNET_DIAL_FORCE_PROMPT = 0x2000,
    INTERNET_DIAL_SHOW_OFFLINE = 0x4000,
    INTERNET_DIAL_UNATTENDED = 0x8000
    }
    }
    }
    код сервиса
    Код (Text):
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.ServiceProcess;
    using System.Text;

    using DialerService.Common;
    using DialerService.Properties;
    using System.Threading;
    using System.IO;

    namespace DialerService
    {
    public partial class Service : ServiceBase
    {
    public Service()
    {
    InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
    DialerConsole.Dialer2 d = new DialerConsole.Dialer2();
    d.Dial();
    }

    protected override void OnStop()
    {
    }
    }
    }
    только я не знаю чем этот код поможет разобраться, как я говорил при написании этого кода на консольной прилаге - всё прекрастно работает, вот я и думаю что надо как-то сервис хитро настроить.
     
  6. f.7

    f.7 Гость

    Происходит следуещее: появляется окно соединения, я жму на кнопочку Connect, и всё соединение установленно, а если в соединении убрать галочку "Запрашивать логин и пароль", то тогда вообще больше ничего делать не надо, кроме как запуска консольного приложения
     
  7. f.7

    f.7 Гость

    подсказало - что сервис выпендривается и что-то надо сделать, а можно узнать что мне это должно было подсказать? только поподробнее пожалуйста!!
     
Загрузка...

Поделиться этой страницей