Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCF-service авторизация/аутентификация 
V
    Опции темы
NikeDeForest
Дата 13.10.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Я сначала опишу, чтобы мне хотелось получить, а потмо надеюсь вы подскажете, что мне больше подходит. 
Есть методы службы, мне бы хотелось ограничить круг лиц, которые могли бы из вызывать. Например какие-то методы могут вызывать только зарегестрированные пользователи, каике-то только администраторы. ПРи этом информация о пользователях хранится в БД MySQL.
Вот вопрос, что посоветуете использовать. Создавать что-то свое или использовать то, что уже есть в .NET и IIS.
Я  копался в МСДН по вопросам аутентификации и авторизации, но не совсем уверен, что правильно усвоил информацию и остались  вопросы.
Вот как мне кажется, мне необходимо использовать авторизацию на основе ролей. Для этого мне необходжимо создать класс производный от RoleProvider (не проблема, считайте, что уже есть  ), в файле web-config расскоментировать <roleService enabled="true"/>, также необходимо создать еще один файл svc (не совсем понял какое имя ему дать, или можно любое). В файле писать
<%@ ServiceHost Language="C#" Service="System.Web.ApplicationServices.RoleService" Factory="System.Web.ApplicationServices.ApplicationServicesHostFactory" %>
Далее надо создать обработчик событий SelectingProvider и в нем указать свой класс -поставщика ролей.


Вот что дальше делать еще не совсем разобрался. 
Но во-первых, мне хотеолось бы узнать в верном ли направлении копаю — это раз.
И два, а не нужно ли мне еще реализовывать своего поставщика членства MembershipProvider. А то я как-то упустил по началу это, а теперь мне кажется, что без этого не обойтись.
Короче, я жду вашего пинка smile . Все подряд реализовывать у меня времени не хватит, поэтому хотел бы услышать, что именно мне надо сделать. Ну и по мере действа буду здесь задавать вопросы. Заранее благодарю за внимание.

--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 16.10.2009, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Вопрос по аутентификации. 
Создал свой класс - наследний MembershipProvider. Класс определен в той же сборке, что и служба. Запуск службы происходит с использованием Visual Studio Development Server.
В Web.config написал следующее (вроде как в МСДНн):

Код

 <membership defaultProvider="ServiceMembershipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
        <add
          name="ServiceMemberShipProvider"
          type="CP.Proj.Service.ServiceMemberShipProvider"
          connectionString="ConnectDB"/>
      </providers>
 </membership>



в behavior службы добавил
Код

<serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
       membershipProviderName="CP.Proj.Service.ServiceMembeShipProvider" />
     </serviceCredentials>


(из-за последнего добавления и ошибка собственно)

При запуске службы ошибка типа 
Имя пользователя/пароль, указанные поставщиком Membership CP.Proj.Service.ServiceMemberShipProvider в конфигурации, недействительны. Такой поставщик не зарегистрирован в system.web/membership/providers.


ServiceMemberShipProvider - навзаниt класса
CP.Proj.Service.ServiceMemberShipProvider - пространство имен и класс

Ошибся где-то или что-то не сделал


Это сообщение отредактировал(а) NikeDeForest - 16.10.2009, 09:44
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 16.10.2009, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Попрбовал так

Код

<authentication mode="Windows"/>
    <membership defaultProvider="ProjMemberShipProvider" userIsOnlineTimeWindow="15">
      <providers>
        <clear />
        <add
          name="ProjMemberShipProvider"
          type="CP.Proj.Service.ProjMemberShipProvider, ProjService, Version=1.0.0.0" />        
              </providers>
    </membership>


Код

<serviceBehaviors>
    <behavior name="ProjService.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
     <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
       membershipProviderName="ProjMemberShipProvider"/>
     </serviceCredentials>
    </behavior>
   </serviceBehaviors>
  </behaviors>
    </system.serviceModel>
</configuration>


ошибка пропала, но фугнкция  
public override bool ValidateUser(string username, string password)
        {
            return false;
            //if (username == "Ivan" && password == "1")
            //    return true;
            //return false;

        }

Судя по коду, доступ будет запрещен всегда, но пока  все наоборот. Судя по всему функция не вызывается.
--------------------
Еще один вопрос ...
PM   Вверх
PashaPash
Дата 16.10.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 6
Всего: 49



NikeDeForest, добавь еще что-то вроде 
Код

    <binding name="mb">
      <security mode="Message">
        <message clientCredentialType="UserName"/>
      </security>
    </binding>

в биндинге для сервиса. или нагугли готовый пример.


--------------------
PM MAIL WWW   Вверх
NikeDeForest
Дата 16.10.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Попробую биндинг. 
Гуглю, но везде попадаю на AspNetSqlProvider. Буду еще гуглить. Спасибо.
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 16.10.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Сделал, как ты сказал. Получил ошибку 

Для обеспечения безопасности сообщений привязка BasicHttp требует эквивалентности BasicHttpBinding.Security.Message.ClientCredentialType и типа учетных данных BasicHttpMessageCredentialType.Certificate. Выберите уровень защиты Transport или TransportWithMessageCredential для учетных данных UserName.

Я не хотел бы пока использовать защиту на транспортном уровне. У меня нет выбора?
--------------------
Еще один вопрос ...
PM   Вверх
PashaPash
Дата 16.10.2009, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 6
Всего: 49



NikeDeForest, да, разработчики WCF перестраховались.
Кака вариант, если сервис хостится в IIS, можно использовать forms authentication напрямую.
http://blogs.msdn.com/brada/archive/2008/0...ilverlight.aspx
http://msdn.microsoft.com/en-us/library/bb515342.aspx
http://msdn.microsoft.com/en-us/library/bb398990.aspx
Для не-silverlight нужно будет дополнитиельно включать BasicHttpBinding.AllowCookies со стороны клиента.


--------------------
PM MAIL WWW   Вверх
NikeDeForest
Дата 18.10.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Вот что пока получается.
Есть свой MembershipProvider. Реализовал только функцию ValidateUser, где тупо возвращаю true.
Запускал с тиспользованием ASP. NET Development сервер. Постоянно получал ошибку 

Имя пользователя/пароль, указанные поставщиком Membership MyMemberShipProvider (MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0) в конфигурации, недействительны. Такой поставщик не зарегистрирован в system.web/membership/providers. 


Потратил два дня, потом решил кинуть службу на ИИС сервер на виртуальной машине. Там у меня сразу в настройках мой membershipProvider показался и служба запустилась. Радости не было предела. Но при запуске выскаивает табличка авторизации. Ввожу от балды что хочу, но меня система авторизации отфутболивает. У меня два вопроса. 
Первый (менее важен).  Как запустит свою службу из под ASP.NET Development server со своим MembershipProvider
Второй (очень важен). Видимо при авторизации работае все таки не мой мембершип, а что-то еще. Что может быть и как это исправить. В настройках службы  (при помощи ИИС)  я в  "Проверка подлинности" отключил все проверки кроме "Обычная проверка подлинности". Что надо еще сделать?

ПРикладываю текст конфига и сам проект. Все таки надеюсь на помощь, уже слишком долго я вожусь с аутентификацией :(

Вот конфиг
Код

<?xml version="1.0"?>
<!--
    Примечание. В качестве альтернативы редактированию этого файла вручную можно использовать 
   средство веб-администрирования, чтобы настроить параметры приложения. Используйте
    параметр Веб-узел->Конфигурация Asp.Net в программе Visual Studio.
    Полный список параметров и комментарии можно найти в файле 
    machine.config.comments, который обычно расположен в папке 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <appSettings/>
    <connectionStrings/>
    <system.web>
        <!--
            Установите compilation debug="true", чтобы вставить символы
            отладки в откомпилированную страницу. Поскольку это 
           сказывается на быстродействии, значение TRUE для этого параметра рекомендуется задавать только 
           на время отладки.
        -->
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </assemblies>
        </compilation>
        <!--
            Раздел <authentication> включает настройки 
            режима проверки подлинности, используемые 
            ASP.NET для идентификации входящих пользователей. 
        -->
        <authentication mode="Windows"/>
    <membership defaultProvider="MyMemberShipProvider" userIsOnlineTimeWindow="15">
     <providers>
        <clear />
        <add name="MyMemberShipProvider" type="MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0" />
        <!-- 
connectionStringName="GoStoreDB"
          applicationName="MyApplication"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          requiresUniqueEmail="true"
          passwordFormat="Hashed" />
          

  -->
      </providers>
    </membership>

    <!--
            Раздел <customErrors> включает настройки действий, 
            выполняемых при возникновении необрабатываемой ошибки 
            во время выполнения запроса. В частности, 
            разработчик может задать HTML-страницы ошибок  
            для отображения вместо трассировки стека ошибок.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
        Для запуска приложения ASP.NET AJAX в службе Internet
        Information Services 7.0 требуется раздел system.webServer. Этот раздел не нужен для предыдущих версий службы IIS.
    -->
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </handlers>
    </system.webServer>
    <system.serviceModel>
        <bindings>
   <basicHttpBinding>
    <binding name="myBinding">
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
   <wsHttpBinding>
    <binding name="MyWSBinding">
     <security mode="Message">
      <transport clientCredentialType="None" />
      <message clientCredentialType="UserName" />
     </security>
    </binding>
   </wsHttpBinding>
  </bindings>
        <services>
   <service behaviorConfiguration="TempService.Service1Behavior"
    name="TempService.Service1">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyWSBinding"
     contract="TempService.IService1">
     <identity>
      <dns value="localhost" />
     </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service>
  </services>
        <behaviors>
   <serviceBehaviors>
    <behavior name="TempService.Service1Behavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="false" />
     <serviceCredentials>
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
       membershipProviderName="MyMemberShipProvider (MyMemberShip.MyMemberShipProvider, MyMemberShip, Version=1.0.0.0)" />
     </serviceCredentials>
    </behavior>
   </serviceBehaviors>
  </behaviors>
    </system.serviceModel>
</configuration>





Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TempService.zip 80,61 Kb
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 19.10.2009, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Понял какой пароль требовался, это пароль админа ОС. ТОлько на ИИС, все равно осталась ошибка 
Теперь тыркаюсь с ощибкой

Сертификат службы не предоставлен. Укажите сертификат службы в ServiceCredentials.

Это сообщение отредактировал(а) NikeDeForest - 19.10.2009, 09:51
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 19.10.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Блин, получилось. На уровне сообщений UserName, на уровне транспорта Basic и используется SSL. 
Осталось решать три проблемы.
1. К службе можно обратиться как по http, так и по https.
Как сделать так, чтобы толко по https?
2. Когда делаю ссылку клиента на службу, то в адресе к endpoint указывается имя сервера, а не его ip-адрес. Хотелось бы, чтобы был именно ip. Пока приходитися править руками после каждого обновления подключения
3.не знаю как  сделать привязку узла в конфиге. Т.е. я сделал ее на ИИС-сервере, там добавил https и сертфиикат. Но мне бы это привязку указать в конфиге, чтобы можно было использовать ASP.Net DEvelopment Server.

Кстати в видео-ролике на techdays в 1 части у сотрудницы Майкрософт при наборе адреса службы в строке адреса браузера выскакивала ошибка досутпа,е сли они набирала http. Если же она набирала https, то открывалась страничка службы, где появлялась ссылка на xml текс службы. Эта ссылка была через https. У меня же во всех случаях ссылка через http. Имеет ли это значение и если да, то хотелось бы это исправить
 
на всякий случай прикладываю проект


Это сообщение отредактировал(а) NikeDeForest - 19.10.2009, 13:36

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  TempService.zip 84,23 Kb
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 19.10.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



С первым вопросом вроде бвы разобрался. В ИИС это делается в настроках "Параметры SSL".   При этом в конеяной точке метаданных, надо запретить также httpGetUrl и разрешить httpsGetUrl.



Это сообщение отредактировал(а) NikeDeForest - 19.10.2009, 15:26
--------------------
Еще один вопрос ...
PM   Вверх
NikeDeForest
Дата 20.10.2009, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Думаю тему можно закрывать. Худо бедно с аутентификацией разобрался, по крайней мере один из способов смог реализовать, посмотрел на другие виды. Вроде кашу в голове разгреб. С авторизацией по идеи проблем не должно быть, по крайней мере с авторизацией с помощью ролей. За другие виды не берусь сказать.
Пока аутентификацию/авторизацию отложу. Опять возьмусь за нее, когда уже служба будет готова, буду прикручивать на готовую. Если какие вопросы будут, буду задавать уже в отдельных темах. Благодарю PashaPash, ты единственный кто откликнулся на этом форуме.и помогал мне и на другом форуме smile
--------------------
Еще один вопрос ...
PM   Вверх
PashaPash
Дата 20.10.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 6
Всего: 49



NikeDeForest, ну, зато ты с основами WCF разобрался за пару дней. у меня на это больше времени ушло smile
Кстати, хостинг WCF под IIS - не самый лучший вариант (IMHO). 


--------------------
PM MAIL WWW   Вверх
NikeDeForest
Дата 27.10.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 136
Регистрация: 15.9.2007

Репутация: нет
Всего: 2



Только сейчас сообщение увидел. А что использвоать вместо IIS? Делать приложение selh-host?
--------------------
Еще один вопрос ...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.2076 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.