Pull to refresh
17
0
Смирнов Сергей @Serginio1

Программист

Send message

.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед

Reading time 12 min
Views 7.9K
Как известно, в .Net Core, на данный момент, нет AppDomain, а WCF только SOAP клиент .Net Core, WCF и ODATA клиенты.

Конечно, задачу можно решить и через Web Api с WebSockets для вызова событий. Но, я просто предлагаю альтернативное решение на маршалинге по TCP/IP и создание объектов, и вызов методов на стороне сервера с помощью Reflection.

Вот как выглядит удаленный вызов методов и свойств. Пример взят отсюда Основы перегрузки операторов:

   // Выведем сообщение в консоли сервера
   string typeStr = typeof(Console).AssemblyQualifiedName;
   var _Console = wrap.GetType(typeStr);// Получим тип на сервере по имени
   // "Hello from Client" будет выведено в консоле сервера
    _Console.WriteLine("Hello from Client");

   // получим тип по имени класса TestDllForCoreClr.MyArr
   // Из сборки TestDll.dll
   var MyArr = wrap.GetType("TestDllForCoreClr.MyArr", "TestDll");

   // Создадим объекты на стороне сервера
   // и получим ссылки на них
   var Point1 = MyArr._new(1, 12, -4); // new MyArr(1, 12, -4);
   var Point2 = MyArr._new(0, -3, 18); // new MyArr(0, -3, 18);

   // Все операции с объектами PointX происходят на стороне сервера
   Console.WriteLine("Координаты первой точки: "+Point1.x+" "+Point1.y+" "+Point1.z);
   Console.WriteLine("Координаты второй точки: "+Point2.x+" "+Point2.y + " "+ Point2.z);

   var Point3 = Point1 + Point2;
   Console.WriteLine("\nPoint1 + Point2 = " + Point3.x + " " + Point3.y + " " + Point3.z);
   Point3 = Point1 - Point2;
   Console.WriteLine("Point1 - Point2 = "+ Point3.x + " " + Point3.y + " " + Point3.z);
   Point3 = -Point1;
   Console.WriteLine("-Point1 = " + Point3.x + " " + Point3.y + " " + Point3.z);
   Point2++;
   Console.WriteLine("Point2++ = "+ Point2.x + " " + Point2.y + " " + Point2.z);
   Point2--;
   Console.WriteLine("Point2-- = " + Point2.x + " " + Point2.y + " " + Point2.z);
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Comments 10

CEF, ES6, Angular 2, WebPack 2 .Net Core десктопное приложение без серверной части

Reading time 6 min
Views 11K
Это продолжение статей:

CEF, ES6, Angular 2, TypeScript использование классов .Net Core. Создание кроссплатформенного GUI для .Net с помощью CEF
CEF, Angular 2 использование событий классов .Net Core

Основная идея этих статей — создание кроссплатформенных приложений на CEF с использованием Angular 2 и .Net Core. Чтобы отвязаться от сервера, используем свежий WebPack и настроим на локальное использование файлов.
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Comments 14

CEF, Angular 2 использование событий классов .Net Core

Reading time 8 min
Views 6.8K
Это продолжение статьи CEF, ES6, Angular 2, TypeScript использование классов .Net Core для расширения возможностей.

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

Хочу немного остановиться на CEF.

Это кроссплатформенный браузер (с ядром используемым Google Chrome), с неограаниченными расширениями за счет использования натива на С++, позволяющее писать полноценное крооссплатформенное декстопное приложение с UI.

Кроме того Chrome 57 принесёт поддержку языков C и C++ для веб-сайтов

Сегодня я покажу как использовать события объектов .Net Core классов в Angular 2.
Многие прочитав мою первую статью приводили довод, что вместо использования классов .Net можно использовать HTTP сервисы.

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

Для примера возьмем класс с событиями.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 10

CEF, ES6, Angular 2, TypeScript использование классов .Net Core. Создание кроссплатформенного GUI для .Net с помощью CEF

Reading time 21 min
Views 11K
Меня все спрашивают — «Зачем это нужно?». На что, я гордо отвечаю — «Я в 1С использую для доступа к торговому оборудованию, к Вэб-сервисам по ws-протоколам, готовым компонентам. 1С, Linux, Excel, Word, OpenXML,ADO и Net Core. Кроме того, сделаю передачу JS объектов на сторону .Net с использованием через DynamicObject.

Можно сделать определенную конфигурацию CEF для всех платформ и можно делать кросспалатформенные декстопные приложения. Как аналог Electron. .Net Core развивается и можно достаточно легко перевести приложения под WPF и UWP на Angular 2» сделав описание классов и использовать IntelliSense при кодировании на TypeScript.

Но я прекрасно понимаю, что это всего лишь высокопарные слова, и мало кому это нужно. Но мне чертовски интересно, особенно после программирования на 1С.
Читать дальше →
Total votes 21: ↑12 and ↓9 +3
Comments 255

ASP.NET Core, Angular 2, SignalR для чайников

Reading time 8 min
Views 49K
Всем привет! Хочу поделиться своим опытом использования ASP.Net Core и Angular 2 с использованием SignalR.

Будучи программистом 1С, часто приходится решать задачи, которые на 1С решить сложно или невозможно. Очень помогает знание .Net. Но вот, что касается клиентской части сайтов, то здесь много тонкостей (JavaScript, CSS, JQuery итд), которые быстро забываются, если ими не пользоваться.

Angular 2 позволяет значительно упростить создание клиентской части. Так TypeScript значительно ближе к C# (и главное позволяет использовать Руслиш), а с шаблонами несложно разобраться зная Razor и Xaml.

Главное, что вы работаете с данными, по аналогии с WPF. При этом есть куча контролов.

Хочу поделиться с такими же бедолагами как я, или кто только начинает изучение Angular 2, ASP.Net Core, так как потратил значительное время, на поиски материалов для изучения.

Для тренировки на кошках был выбран мой проект 1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp. Исходники Здесь

Пока не вышел. Net Core 1.2 и NetStandard 2, сейчас нет поддержки клиента для SignalR под .Net Core

Итак, начнем. Для работы нам потребуется:

1. ASP.NET Core + Angular 2 шаблон для Visual Studio
2. Руководство по ASP.NET Core
3. Руководство по Angular 2
4. Руководство по TypeScript
5. Компоненты от PrimeNG
6. Компоненты Bootstrap
Читать дальше →
Total votes 16: ↑11 and ↓5 +6
Comments 34

.Net Core, обмен с 1C по TCP/IP между различными устройствами

Reading time 12 min
Views 16K
Начну с «Вести с полей». Вышло обновление Updates in .NET Core 1.0.1. Главное из этого для меня было Access violation on Windows – coreclr 6460:
In Jitstartup, JIT creates a file descriptor for stdout and unconditionally passes it to setmode, without checking for failures. This happens at. Failure to check for invalid descriptors can result in setmode triggering failfast.

Из-за этой ошибки вылетало исключение при вызове статического .Net-метода в 64 разрядном клиенте 1С.
Читать дальше →
Total votes 29: ↑21 and ↓8 +13
Comments 16

.Net Core, WCF и ODATA клиенты

Reading time 5 min
Views 24K
Хотел написать статью про использование этих технологий в 1С, но потом решил пока написать про использование WCF, ODATA в .Net Core. Поэтому в этой статье не будет так раздражающего всех Руслиша и Ъ. .Net Core технология молодая и быстроразвивающаяся. При этом и отличающаяся от своего старшего брата.

В VS 2015 Update 3 для приложения под .Net Core нет привычного нам элемента меню «Добавить Ссылку на Службу». Вместо этого есть «Add Connected Services». Про то, как его установить, можно посмотреть здесь WCF Connected Service for .NET Core 1.0 and ASP.NET Core 1.0 is now available. Для подопытного сервиса был выбран Web сервис ЦБ Веб-сервис для получения ежедневных данных (курсы валют, учетные цены драг. металлов...). В общем подключился по методичке выше. Получил описание классов. Но при этом есть отличие от большого брата.
Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Comments 0

1С,.Net Core. Динамическая компиляция класса обертки для получения событий .Net объекта в 1С

Reading time 9 min
Views 7.4K
Это практическое применение из предыдущей статьи .Net Core, 1C, динамическая компиляция, Scripting API.

По сути это продолжение .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия, но для кроссплатформенного .Net Core. Но в той разработке я использовал CodeDom. В .Net Core удобнее использовать Roslyn Scripting API.

В свое время делал вручную обертку для WhatsApp, а там более 30 событий. При этом весь процесс можно автоматизировать с помощью кодогенерации и в конечном итоге можно этот код динамически скомпилировать.

В «Создание компонент с использованием технологии Native API» есть метод для вызова внешнего события в 1С ExternalEvent. Синтаксис:

bool ExternalEvent(WCHAR_T* wsSource, WCHAR_T* wsMessage, WCHAR_T* wsData) 

Параметры:

• Тип: WCHAR_T*. Строка с наименованием источника события.
• Тип: WCHAR_T*. Строка с наименованием события.
• Тип: WCHAR_T*. Строка c параметрами события.

Но в качестве wsData будем передавать ссылку на объект созданный из параметров события.

Итак начнем.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Comments 4

.Net Core, 1C, динамическая компиляция, Scripting API

Reading time 11 min
Views 9.6K
Доброго времени суток хабратчане! Сегодня я продолжу мучить вас великим и могучим Руслишем. Это продолжение статей:

» Разработка → Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
» Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
» Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II
» Асинхронное программирование в 1С через .Net Native ВК
1С, Linux, Excel, Word, OpenXML,ADO и Net Core

На данный момент в .Net Core 2 варианта динамической компиляции

1. Это аналог CodeDom Microsoft.CodeAnalysis.CSharp.CSharpCompilation
2. Roslyn Scripting Api. Примеры здесь
Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Comments 57

1С, Linux, Excel, Word, OpenXML,ADO и Net Core

Reading time 7 min
Views 9.2K
Доброго времени суток хабратчане! Сегодня я продолжу мучить вас великим и могучим Руслишем. Это продолжение статей:

» Разработка → Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
» Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux
» Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II
» Асинхронное программирование в 1С через .Net Native ВК

С того времени я добавил использование расширений Linq. В этой статье я коснусь практического использования моей компоненты. А именно кроссплатформенной работой с файлами Excel и Word c помощью OpenXML и NetStandart.

Собственно ради чего эта разработка и задумывалась. Исходники были взяты отсюда. К сожалению без Nuget подключить библиотеку к проекту нельзя. Но через CoreClr его можно подключить. Справочную информацию по работе с OpenXML можно посмотреть здесь.
Как мне… (Open XML SDK)

Итак начнем с чтения страниц Excel. Задача преобразовать данные в ТаблицуЗначений.
Читать дальше →
Total votes 19: ↑11 and ↓8 +3
Comments 17

Асинхронное программирование в 1С через .Net Native ВК

Reading time 5 min
Views 9.8K
Это продолжение статьи Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II

В .Net сейчас во многих классах есть асинхронные методы. В 1С их можно применять например так

Стр=ъ(Клиент.GetStringAsync(uriSources)).Result;

И напомню про синонимы из предыдущей статьи/ Так добавив синоним

Врап.ДобавитьСиноним(HTTPClient.ПолучитьСсылку(),"ПолучитьСтроку","GetStringAsync");
Врап.ДобавитьСиноним(Task.ПолучитьСсылку(),"Результат","Result");

Я могу использовать все на русском

Стр=ъ(Клиент.ПолучитьСтроку(адрес)).Результат;

Но можно использовать асинхронные методы так.


        Клиент = ъ(Врап.Новый(HttpClient.ПолучитьСсылку(),handler.ПолучитьСсылку()));
	
	лист=ъНовый("System.Collections.Generic.List`1[System.Threading.Tasks.Task]");
	Для каждого стр из ПолучитьСписокURL() Цикл
		Задача=ъ(Клиент.GetStringAsync(стр));
		лист.Add(задача.ПолучитьСсылку()); 
	КонецЦикла;
	
	Task=ъТип("System.Threading.Tasks.Task");
	
	Пока лист.Count>0 Цикл
		массив=ъ(лист.ToArray());	
		индекс = Task.WaitAny(массив.ПолучитьСсылку());
		Сообщить(индекс);
		результат = ъ(лист.get_Item(индекс)).Result;
		Сообщить(СтрДлина(результат));
		лист.RemoveAt(индекс);
	КонецЦикла;

Это конечно не совсем асинхронное программирование, но все же лучше чем отдельно для каждого запроса вызывать синхронный метод.
Читать дальше →
Total votes 27: ↑16 and ↓11 +5
Comments 52

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II

Reading time 6 min
Views 6.7K
Это продолжение статей:

» Разработка → Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux
» Разработка → Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux

С того времени добавил поддержку методов с параметрами по умолчанию, вызов методов расширений, вывод типов для дженерик методов, поддержка объектов реализующих IDynamicMetaObjectProvider (ExpandoObject,DynamicObject), добавление синонимов к членам типа и асинхронное программирование на 1С!
Читать дальше →
Total votes 16: ↑13 and ↓3 +10
Comments 18

Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux

Reading time 14 min
Views 8.6K
Это продолжение статьи «Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux».

Там мы получили возможность использования классов .Net в неуправляемом приложении. Теперь воспользуемся «Создание компонент с использованием технологии Native API».

Итак, начнем.
Читать дальше →
Total votes 15: ↑7 and ↓8 -1
Comments 12

Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux

Reading time 13 min
Views 7.7K
Будучи программистом 1С, мне часто приходится использовать классы .Net через различные прослойки.

Использование сборок .Net через обертку реализующую IReflect
Для подключения .NET сборок используется «CLR Hosting API»
1C.Net: Предприятие – пример коммерческого успеха .Net-решений в России
Как вызвать метод из C# в 1С?

Но все они используют в той или иной степени COM. С появлением .Net Core стало возможным использование сборок .Net и на любой оси отличной от Windows.

На просторах интернета было найдено решение: Hosting .NET Core Clr in your own process и simpleCoreCLRHost и
initializeCoreCLR createDelegate и
unixinterface

Суть подключения заключается в загрузке библиотеки coreclr.dll, получения нужных интерфейсов и запуск CLR Runtime Host.
Читать дальше →
Total votes 11: ↑7 and ↓4 +3
Comments 9

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity