Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Доработка клиент-серверного приложения.


Автор: Vanoha12 4.11.2012, 14:42
Программа документооборота DocsVision.
Скрипты у клиента пишутся на VisualBasicScript, в коде можно обращаться к COM объектам.
Иногда нужно не только реализовывать логику, а VBS скуден и не позволяет отображать необходимые интерфейсы.

Сейчас могу написать com-объект dll и зарегистрировать на машине пользователя. И вызывать WindowsForm.
Но если dll меняется, то его нужно перерегистрировать на всех машинах, а это не очень удобно, постоянно обращаться к админал, групповые политики и т.д.

Что хочется.
1. Написать один COM для клиента, зарегить его один раз. 
2. Написать dll для сервера, где я бы создавал просто методы и менял только его.
3. Теперь у клиента я просто вызываю наш ком, и передаю туда название метода и параметр(путь будет один, если их будет больше, то передам xml и буду парсить. С возвратом результата так же.)

т.е. примерно так. 
Опыта у меня не много. И с терминологией не всей знаком. Не хотелось бы изобретать велосипед. 
Что скажете?

1. Для Com   
Код

    [Guid("01D10028-A89D-47ee-8048-C27B6DD4B126")]
    [ComVisible(true)]
    public class Test22
    {
         [ComVisible(true)]
         public string GetFromMethod(string metodName, string metodParam)
         {
            return globalDll.TestingGlobalDll(metodName, metodParam);
         }
    }

    internal class globalDll
    {
        const string DllLocation = @"\\сервер......\testCom.globalDll.dll";
        [DllImport(DllLocation, EntryPoint = "TestingGlobalDll")]
        public static extern string TestingGlobalDll(string metodName, string metodParam);
    }


2. На сервере
Код

public static class TestGlobalDll
    {
       static public string TestingGlobalDll(string metodName, string metodParam)
       {
           switch (metodName)
           {
               case "meth1":
                   return meth1(metodParam);
               case "meth2":
                   return meth1(metodParam);
               default:
                   return "No method";
           }
       }

        static string  meth1(string param)
        {
            Form form = new Form(param);
            //ну типа открыли форму и получили результат.
            return form.ShowDialog().ToString();
        }

        static string meth2(string param)
        {
            Form form2 = new Form(param);
            //ну типа открыли ещё форму и получили результат.
            return form2.ShowDialog().ToString();
        }
    }


3. Теперь у клиента можно вызывать на VBS
Код

    Set test = CreateObject("Test22")
    MsgBox test.GetFromMethod("meth1", "тестирование 1")
    MsgBox test.GetFromMethod("meth2", "тестирование 2")
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)