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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JAVA или .NET ? обсуждаем достоинства и недостатки 
:(
    Опции темы
Allexx
Дата 3.2.2004, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




M
mr.DUDA
Вопросы, мнения и просто свои мысли по поводу особенностей платформы .NET в сравнении с JAVA можно обсудить в этой теме. В любых других темах замечания типа "JAVA (или .NET) круче!" будут являться оффтопом, даже в том случае, если они аргументированы :).

P.S. аналогичная тема есть в разделе по JAVA.

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


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 18:16)
Есть ряд других моментов, например .НЕТ приложение завязывается на АДО провайдера (SqlConnection/OleDbConnection) тогда как Java позволяет переходить с одной дб на другую без проблем.

Если ты будешь использовать не конкретные классы из System.Data.OleDb или System.Data.SqlClient, а интерфейсы из System.Data (например, IDbCommand, IDataProvider, IConnection, ITransaction, etc), то тоже можешь благополучно сменять БД (конечно, при условии, что твой SQL SQL-92 compliant).


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
batigoal
Дата 12.4.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(Domestic @ 12.4.2005, 18:16)
virtual/override/new
- это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?
Цитата(Domestic @ 12.4.2005, 18:16)
На уровне языка - отсутствие необходимости декларировать throws и ловить иксепшны

Явное объявление исключений, бросаемых методом, считаю одним из лучших свойств языка Java. Имхо.
Цитата(Domestic @ 12.4.2005, 18:16)
Есть ряд других моментов, например .НЕТ приложение завязывается на АДО провайдера

Мда, это действительно нехорошо.




--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 12.4.2005, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Если ты будешь использовать не конкретные классы из System.Data.OleDb или System.Data.SqlClient, а интерфейсы из System.Data (например, IDbCommand, IDataProvider, IConnection, ITransaction, etc), то тоже можешь благополучно сменять БД (конечно, при условии, что твой SQL SQL-92 compliant).


Как это? - мне ведь эtи интерфейсы реализовать нужно, так ведь? Откуда в ниh функциональность возьмется?

К тому ж Студия слишом упростила работу с АДО, так что малo кто будет будet подобнoe делать.

Цитата
- это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?


это как в с++, только new еще добавлен.


--------------------

PM   Вверх
mr.DUDA
Дата 12.4.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Domestic @ 12.4.2005, 18:16)
2. В Java не нужно пользовать virtual/override/new; ИМХО это удобнее.

Цитата(Lamer @ 12.4.2005, 18:21)
это чего? Какие-то спецификаторы (абстрактный, перегруженный, новый)?

Если кому-то что-то кажется необоснованным, то сначала надо ознакомиться с теорией (зачем это нужно и что это даёт), а уж затем говорить о "кривизне" подхода.
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.

Цитата(Lamer @ 12.4.2005, 18:21)
Явное объявление исключений, бросаемых методом, считаю одним из лучших свойств языка Java. Имхо.

Откуда я могу заранее узнать обо всех исключениях, которые может выкинуть метод?
С другой стороны, если НУЖНО знать, какие СПЕЦИФИЧНЫЕ исключения может выкинуть метод или свойство - всегда можно задокументировать их в XML-комментариях (там есть специальный тэг для этого).


--------------------
user posted image
PM MAIL WWW   Вверх
batigoal
Дата 12.4.2005, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(mr @ 12.4.2005, 18:38)
Откуда я могу заранее узнать обо всех исключениях, которые может выкинуть метод?

Они объявлены в описании тех методов, которые ты вызываешь в своем smile .
Цитата(mr @ 12.4.2005, 18:38)
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.

Разумно. Мне нравится. Приведи, пожалуйста, пример.

P.S. Если ты не указываешь override, но при этом осуществляешь переопределение, это вызовет оштбку компиляции?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
arilou
Дата 12.4.2005, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 18:20)
Или приводи пример.

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

Код

using System;
using System.Collections;
using System.Reflection;

namespace Tests
{
    /// <summary>
    /// Делегат (тип). 
    /// string param1 - сигнатура метода
    /// </summary>
    public delegate void TestDelegateType(string param1);

    /// <summary>
    /// Данный атрибут можно связать только с методом
    /// </summary>
    [AttributeUsage(AttributeTargets.Method)]
    public class TestAttrAttribute : Attribute
    {
        private string _param1 = string.Empty;
        public string Param1 { get { return _param1; } }

        public TestAttrAttribute(string param1) : base()
        {
            _param1 = param1;
        }
    }

    public class TestClass
    {
        /// <summary>
        /// Поле типа TestDelegateType (факт. ссылка на метод)
        /// </summary>
        TestDelegateType delegateObject;

        public void Test()
        {
            // привязываем метод к полю
            delegateObject = new TestDelegateType(delegateMethod);

            // понеслось :)
            Console.WriteLine("Вызываем метод по ссылке");
            delegateObject("hello world!");
            Console.WriteLine("или через Reflection");
            delegateObject.DynamicInvoke(new object[]{"hello world from Reflection"});

            Console.WriteLine("Получаем метаданные, связанные с методом, на который указывает delegateObject");
            MethodInfo minfo = delegateObject.Method;

            // получаем все атрибуты
            object[] attrs = minfo.GetCustomAttributes(false);

            foreach(object attr in attrs)
                if(attr.GetType() == typeof(TestAttrAttribute))
                {
                    TestAttrAttribute tattr = attr as TestAttrAttribute;
                    Console.WriteLine("Нашли наш атрибут. Параметр param1 = " + tattr.Param1);
                }
                else
                    Console.WriteLine("Нашли какой-то атрибут. Тип - " + attr.GetType().FullName);
        }

        /// <summary>
        /// Метод, соотв. сигнатуре типа TestDelegateType
        /// </summary>
        /// <param name="param1"></param>
        [TestAttr("delegateMethod with attribute")]
        [MTAThread()]
        private void delegateMethod(string param1)
        {
            Console.WriteLine("delegateMethod: " + param1);
        }
    }

    class Program
    {
        static void Main()
        {
            TestClass obj = new TestClass();
            obj.Test();
            Console.ReadLine();
        }
    }
}


Цитата(Domestic @ 12.4.2005, 18:33)
Как это? - мне ведь эtи интерфейсы реализовать нужно, так ведь? Откуда в ниh функциональность возьмется?


Код

IDbConnection conn = new System.Data.SqlClient.SqlConnection() as IDbConnection;


Т.е. все провайдеры в ADO.NET реализуют один общий набор интерфейсов. В своем коде ты можешь работать с объектами типа интерфейса. Могу пояснить, как указать в рантайме, с каким провайдером работать, если нужно.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
arilou
Дата 12.4.2005, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Добавление про ссылки на методы: компилятор не даст прицепить метод к переменной-делегату, если сигнатура (кол-во и типы параметров) не совпадает


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Цитата
Если кому-то что-то кажется необоснованным, то сначала надо ознакомиться с теорией (зачем это нужно и что это даёт), а уж затем говорить о "кривизне" подхода.
1) virtual - декларирует виртуальный метод;
2) override - перекрывает реализацию вирт.метода в производном классе. В С++ зачастую не было ясно, что откуда унаследовано и перекрыто, в то время как читая шарповский код - сразу понимаешь:что, как и почему;
3) new - позволяет ввести в класс невиртуальный метод с той же сигнатурой что и виртуальный в базовом классе. При этом, в классе остаётся и виртуальный метод, его тоже можно вызывать если привести тип к базовому. В С++ такой возможности не было. Если нужны примеры, для чего это может применяться - приведу.


чтo -то разговор переходит в нехорошее русло.
Я прекрасно знаю для чего это нужно. В Java все (кроме статик) методы по умолчанию виртуальны, все методы сабклассов с такой же сигнатурой по умолчанию override, добиться невозможность перегрузки можнос помощью final.
Единственный аргмент, который я встречаю в пользу override/new/virtual - это versioning. Например, разработчик использует библиотеку, наследуя от класса А , и декларирует метод М . Если в следующей версии в библиотеку будет включен метод М, то в Java получится что разработчик делает override этого метода, хотя скорее всего он этого делать не хотел. Вроде бы тут и нужны new и проч.
Но у такого подхода есть свой недостаток: если ты не объявляешь метод виртуальным, его нельзя перегрузить. Если разработчик не объявил метод А виртуальным, а наследующему классу нужно сдеелать оверрайд метода - этого сделать уже никак нельзя.
Ситуация номер 2: Есть класс с методом virtual A. Есть наследник, с методом new virtual A. Если теперь кто-то наследует от этого класса и не заметит что он new, получим хороший баг.

Цитата
Накропал небольшой пример. Если чего-то еще продемнострировать, скажите, допишу.


Дык опять делегаты?

Цитата

Т.е. все провайдеры в ADO.NET реализуют один общий набор интерфейсов. В своем коде ты можешь работать с объектами типа интерфейса. Могу пояснить, как указать в рантайме, с каким провайдером работать, если нужно.


в твоем примере ты пользуешь System.Data.SqlClient.SqlConnection() - для МСДЕ пойдет, а что если мне нужен Oracle?


--------------------

PM   Вверх
mr.DUDA
Дата 12.4.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Lamer @ 12.4.2005, 18:43)
Разумно. Мне нравится. Приведи, пожалуйста, пример.

Пожалуйста. Вот задача.

Имеется абстрактный базовый класс Base (или интерфейс, как будет угодно). В нём есть виртуальный (или переопределяемый, не знаю как в JAVA это называется) метод Action().

Нужно унаследоваться от Base таким образом, чтобы класс Derived перекрывал метод Action() и "запечатывал" его (т.е. запрещал для дальнейшего перекрытия).

З.Ы. это называется member names hiding.
Добавлено @ 19:18
Цитата(Domestic @ 12.4.2005, 19:12)
Но у такого подхода есть свой недостаток: если ты не объявляешь метод виртуальным, его нельзя перегрузить. Если разработчик не объявил метод А виртуальным, а наследующему классу нужно сдеелать оверрайд метода - этого сделать уже никак нельзя.

Согласен.


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

Цитата(Domestic @ 12.4.2005, 19:12)
чтo -то разговор переходит в нехорошее русло.

Это я к тому, что ИМХО, с virtual/new удобнее smile, а на вкус и цвет - все фломастеры одинаковые.


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 12.4.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172




Цитата
Имеется абстрактный базовый класс Base (или интерфейс, как будет угодно). В нём есть виртуальный (или переопределяемый, не знаю как в JAVA это называется) метод Action().


Во-первых скажу так: это уж совсем "высший пилотаж", то есть я допускаю что такоe иногда нужно, но такжe допускаю и тo, что всегда можно обойтись без этого.
Пример:
Код

abstract class X
{
    public abstract void Y();
}

public class A extends X
{   
    public final void Y()
    {}
}

// Primer
public class B extends A
{   
    public void Y()
    {}
}

Результat
[quote]
A.java:16: Y() in B cannot override Y() in A; overridden method is final
public void Y()
^
1 error

Добавлено @ 19:22
Цитата
а на вкус и цвет - все фломастеры одинаковые.


smile smile smile


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 19:12)
Дык опять делегаты?

Похоже, возникло непонимание по поводу делегатов и с чем их едят. Поясняю:

Делегаты решают проблему, которая в других языках решалась с помощью указателей на функции. В отличии от последних, делегаты типизированы. Это означает, что
Цитата(arilou @ 12.4.2005, 19:03)
компилятор не даст прицепить метод к переменной-делегату, если сигнатура (кол-во и типы параметров) не совпадает

(Сам себя цитирую smile дожился...)

Понятие делегата содержит в себе 2 вещи. По-моему, они именуются одним и тем же словом "делегат", по крайней мере, в моей речи. Из-за этого могут возникать непонятки. Поэтому существуют:

1) Делегат-тип. Описывает сигнатуру с помощью заразервированного слова delegate:
Код

public delegate void TestDelegateType(string param1, int param2);

Этот код объявляет тип TestDelegateType, который описывает ссылку на метод, не возвращающий значения (void), и требующий параметров string и int именно в таком порядке.

2) Переменную типа делегат. Описывает фактическую ссылку на метод.
Код

TestDelegateType delegateObject = null;

Т.о. переменная delegateObject будет испольоваться для того, чтобы "подцепить" к ней метод, и делать с ним всякие непотребные вещи, например, вызывать smile
Код

delegateObject = new TestDelegateType(delegateMethod);
// ........
void delegateMethod(string param1, int param2)
{
  // ......
}

Этот код записывает в delegateObject ссылку (читай, type-safe pointer) на метод delegateMethod. Обратите внимание, что типы параметров данного метода соответствуют типам параметров, указанных в определении TestDelegateType.

Таким образом, делегаты реализуют то, что в C++ называлось указателем на функцию, но не выносилось в отдельное понятие языка. В отличии от C++, делегаты являются type-safe языковыми конструкциями.

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

Код

public event TestDelegateType TestDelegateEvent;


Если упростить, то это практически равнозначно определению TestDelegateEvent, как переменной типа TestDelegateType.

Надеюсь, что я развеял непонятки по поводу делегатов.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 12.4.2005, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Аналогично на шарпе:
Код
public abstract class X
    {
        public virtual void Do()
        {
        }
    }

    public class Y : X
    {
        public new void Do()
        {
        }
    }

    // Primer
    public class Z : Y
    {
        public override void Do()
        {
        }
    }


Два класса (X и Y) - вырожденный пример, на самом деле их бывает больше.

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


--------------------
user posted image
PM MAIL WWW   Вверх
Domestic Cat
Дата 12.4.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Видимо мы немного недопоняли друг друга.
Я указывал вот на что:
Код

delegateObject = new TestDelegateType(delegateMethod);



То есть, что такое delegateMethod? Ссылка на метод. Но можно ли ее использовать где -нибудь еще, например, как в Питоне написать
Код

a = delegateMethod;
b = delegateMethod;
a("q", 1);
b("c", 2);


Я понимаю- всe это отсутствует, вместo используется делегат, что по сути тo ж самое. Так чо ладно, забудем прo delegateMethod - в конце концов этo неважно.
Добавлено @ 19:57
Цитата
Практическая польза от new может быть извлечена не только в плане возможности "запечатать" полиморфный метод, но и в случае, если нужно ввести "новый" метод, который никак не связан с методом базового класса но имеет ту же сигнатуру.


Как говорится, палка о двух концах - я уже говорил что это для использующих такой меод нетривиальная вещь, можно легкo забыть (положить объект в контейнер с типом суперкласса например) и потом искать отчего непонятно что проишодит.
С другой стороны, посмотри на это с точкi зрения ООП: есть класс Машина, с методом Ехать.
Ктo-тo наследовал от нее класс БМВ и сделал метод Ехать new; так что теперь БМВ не едет а летит.
Получается теперь, что если смотреть на такоj объект как нa БМВ, тo он летит; нo как только оn рассматривается как Машинa, - он едет smile


--------------------

PM   Вверх
arilou
Дата 12.4.2005, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Domestic @ 12.4.2005, 19:49)
Так чо ладно, забудем прo delegateMethod

ОК. Давай вернемся к ADO.NET.

Ты спрашивал, как использовать Oracle через ADO.NET. Я не знаю, есть ли managed реализация провайдера для Оракла, совместимая с .NET 1.1, но знаю, что в NET 2.0 она будет (System.Data.OracleClient).

Теперь об интерфейсах ADO.NET и их использовании. Допустим, тебе надо в своем приложении реализовать работу с MS Access и SQL Server. Естественно, ты захочешь работать с базами унифицированно. Для этого применяются вышеописанные интерфейсы.

В своей проге я указываю, какой провайдер мне нужен, в конфигурационном файле. У меня есть класс Configuration:
Код

// мой интерфейс доступа к данным
public interface IDataProvider
{
   IDbCommand GetCommand(string commandText, object[] paramList);
   IDbConnection GetConnection();
}

// реализация для SQL Server. Находится в отдельной сборке
public class SqlDataProvider : IDataProvider
{
   public IDbCommand GetCommand(string commandText, object[] paramList)
  {
        SqlCommand cmd = new SqlCommand();
        // создаем команду .....................
        return cmd as IDbCommand;
  }
   public IDbConnection GetConnection()
   {
        return new SqlConnection(Configuration.ConnectionString) as IDbConnection;
   }
}

public class Configuration
{
   public static readonly IDataProvider Provider = null;
   // ..............
   
   public static void ReadConfiguration()
   {
      // ............
      Provider = Activator.CreateInstance(providerType);
   }
}


Во всей программе используется Configuration.Provider для доступа к данным:
Код

IDbConnection conn = Configuration.Provider.GetConnection();
conn.Open();
// ...................
conn.Close();


Я думаю, что почти ничего нового в этом подходе ты не увидишь, кроме того, как сделать, чтобы не заморачиваться с разными ADO.NET провайдерами.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 12.4.2005, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Согласен, но JDBC вообще изначально не зависит ни от какого провайдера. Все что ей нужно - драйвер, предоставляемый провайдером; если ты хочеш сменить базу данных, ты меняешь драйвер.
Точно так же Java работает с Naming and Directory Services, Authentification and Authorization Services и т п - предоставлят интерфейс, единый для всех. Поэому я могу написать Java приложение, для использования которого нужнa аутентификация, причем оно не поменяется, если я сменю Виндовс аутентификацию на Керберос.



--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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