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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dll-библиотека .NET на .aspx странице? Как правильно создать класс? 
V
    Опции темы
Servena
Дата 19.10.2007, 15:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Здравствуйте. Появилась интересная проблема: нужно добавить динамически подключаемую библиотеку написаную на
.NET на .aspx страничку.
Делаю так, сначала создаю библиотеку:
Код

using System;
using System.Collections.Generic;
using System.Text;

namespace clsExample
{
    public class Class1
    {
        public string GetString()
        {
            return "Привет";
        }
    }
}

потом добавляю ее на .aspx, перед этим скопировав саму библиотеку в папку, где лежит страничка:
Код

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
    <form id="form1" runat="server">   
        <object id="MyObject" classid="clsExample.dll#clsExample.Class1" width="300" height="40">            
        </object>  
    </form>
    <script language="javascript" type="text/javascript">
        var t=document.getElementById("MyObject");
        alert(t.GetString());        
    </script>
</body>
</html>

В итоге, после перехода на эту страницу, пишет, что у объекта t нет такого свойства (использую IE, а в качестве
сервера - IIS).
Может кто подскажет как это сделать или даст ссылки на необходимые источники?
Заранее, большое спасибо.
PM MAIL   Вверх
Servena
Дата 23.10.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Вообщем, кому это будет интересно - то есть уже кое какие результаты. Пишите.

Зачем это? Опишу мой случай.
Имеется фирма в которой есть лаборатория, в которой есть электронные весы подключенные к компьютеру.
Также имеется внутри предприятия некая система(приложение, построенное на АСП.НЭТ), которая, в частности, 
использует измерения с этих весов. Так вот, показания измерений снимаются прямо с ВЭБ-странички (это никаким
джаваскриптом, например, не сделаешь). На сервере есть ДЛЛ билблиотека (написана на C#) для работы с этими 
весами и когда на неком компьютере запускается страничка для измерений - с сервера передается браузеру эта библиотека, которая 
может произвести измерения. Таким образом все происходит на страничке, не нужно создавать никаких
дополнительных приложений и т.п.

Работает это пока только под ИЕ.
PM MAIL   Вверх
HAL707
Дата 24.10.2007, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ничего себе архитектура...
А почему просто не серверная страничка, которая сама проводит измерения, исполузуя свою локальную библиотеку?
Тогда бы другие пользователи смогли бы получать результаты подключившись к этой страничке, безо всякого шаманизма с dll...
Или я чего-то не учитываю?
PM MAIL   Вверх
Servena
Дата 25.10.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Сервер один, а лаборатория от него находится на приличном растоянии, к тому же их (лабораторий) несколько. 
Человек, загружает приложение(через Вэб-браузер). Как вэб-страничка может снять показания с RS-232?
Если у тебя есть идеи - то давай их.

Пока все разрабатывается с использование встроенного элемента управления в веб-страничку, который пишется на C# и есть ряд проблем, основная из них сейчас это: как лучше всего разработать механизм обработки ошибок (исключений) чтобы его понимал Джаваскрипт, используя эту библиотеку.

К тому же, с точки зрения пользователя это очень удобно - загружая страничку, он даже не подозревает, что с сервера загружается какая-то библиотека(20 Кб), он просто берет и пользуется страничкой. 
PM MAIL   Вверх
HAL707
Дата 25.10.2007, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Сервер один, а лаборатория от него находится на приличном растоянии, к тому же их (лабораторий) несколько. 
Человек, загружает приложение(через Вэб-браузер). Как вэб-страничка может снять показания с RS-232?


Да не веб-страничка. А сервер. Страничка только отображает результат...

Хотя если весы находятся в лаборатории, не рядом с сервером, то сказанное мной теряет смысл.

То есть идея была в том, что сервер сам проводит измерения (используя эту библиотеку для RS-232 и весы) и тупо формирует сраничку результатов, которую может просмотреть любой.

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Нет, идея в том, что производить измерения можно ГДЕ УГОДНО, лишь бы к компьютеру были подключены весы 
и он имел доступ к соответствующей вэб-страничке. Измерения проводит ДЛЛ, которая хранится на сервере и когда человек
загружает Вэб-страничку - библиотека автоматически пересылается в то место, от куда пришел запрос и инициализирует 
измерения.
PM MAIL   Вверх
andrew_sh
Дата 14.11.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ну что, разабрались с проблемой ??? В проекте в котором я принимаю участие похожая структура. Предполагаю решение в использование property. У меня по крайней мере работает.

Это сообщение отредактировал(а) andrew_sh - 14.11.2007, 22:48
PM MAIL   Вверх
Servena
Дата 15.11.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Да, все получилось. Входим в фазу испытаний. Есть одна проблема с безопасностью. На одних компьютерах работает, на других нет. И вроде бы выставляем в настройках .НЭТа - Full trust для зоны в которой используется сборка, но все равно где-то еще влияют настройки самого браузера. Вобщем, тема пока очень туманна. Как правильно настроить ИЭксплоер, .НЭТ чтобы оно работало 100% ??? (даже спросить пока не у кого).


Сейчас буду пробовать еще сделать так, чтобы библиотека лежала в одном месте, а не как сейчас - в двух разных местах одна и та же библиотека. Попытаюсь использовать найденную ТОБОЙ информацию. Сообщу о результате.  
PM MAIL   Вверх
Zakonnic
Дата 15.11.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Очень странная проблема. Похоже с архитектурой что-то не так. По идее у этой dll параметры безопасности не должны давать доступ к компу клиента, иначе она может чего-нибудь напортачить (переслать папку "мои документы" в ненужное вам место smile ). Или хакеры могут это дело перехватить и отправить свою длл. 

Почему не сделать мини-приложение, устанавливаемое через веб одним кликом по ссылке (вроде технология так и называется - click once) и общающееся с веб-сервисом или даже тупо http запросами? В конце-концов оборудвание обычно стационарно соединено с машиной и можно поставить полноценное приложение, скачиваемое с сайта. Хотя, наверное, вы этот вариант рассматривали...

Кстати, Silverlight (новая технология от MS) вроде специально разработана, чтобы закачивать длл на клиента. Ну в смысле - это как флеш, но с дллками и полной поддержкой дотнет. Правда там тоже приложения работают в сендбоксе. Но можно порыть и в этой области: http://www.microsoft.com/silverlight/
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
Servena
Дата 15.11.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Zakonnic, 
на счет безопастности: у ДЛЛ-ки есть строгое имя (там много цифр), так что подсунуть другую будет сложно. Да и на уровне Корпрации будет настроено что ей можно делать (пока там фул траст - но мы над этим работаем), так что даже если это будет левая библиотека - она не сможет сделать что-то не то. На счет безопасности, эта технология намного продвинутее, чем АктивХ. 

Цитата

Почему не сделать мини-приложение, устанавливаемое через веб одним кликом по ссылке
 
- работник не должен задумываться еще что-нибудь устанавливать, он просто должен снимать данные. К тому же, если это отдельное приложение - то ему тоже нужно давать доступ в БД на сервер? Или как оно будет передавать данные для обработки на сервер?
И как это будет связано с основной системой? Вообщем, проще тогда вручную впечатывать данные в форму.


PM MAIL   Вверх
Zakonnic
Дата 16.11.2007, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Servena @  15.11.2007,  14:39 Найти цитируемый пост)
у ДЛЛ-ки есть строгое имя (там много цифр)
А, ну да. Я чего-то слышал про подделку этого имени, но это было давно и не правда.

Цитата(Servena @  15.11.2007,  14:39 Найти цитируемый пост)
работник не должен задумываться еще что-нибудь устанавливать, он просто должен снимать данные.
Там думать не надо. Все ставится само и по умолчанию. Во всяком случае в демонстрационном примере smile Но на самом деле лучше создать собственный инсталлятор. Можно сделать два - один делает все молча, а второй умеет настраивать параметры. Если не пользовались Click Once, зайдите на вкладку "Publish" проекта приложения.

Цитата(Servena @  15.11.2007,  14:39 Найти цитируемый пост)
Или как оно будет передавать данные для обработки на сервер?
Я же написал. Как вариант - через веб-сервис или HttpWebRequest. 
Если использовать веб-сервис, то приложение вызывает его метод, которому передает в качестве аргумента данные. Оно само запаковывается в xml и летит на сервер, который и пишет все в базу обычным способом. 
Если через класс HttpWebRequest, то приложение отсылает данные на обработчик (допустим, .ashx) на сервер:
Цитата

The GetRequestStream method returns a stream to use to send data for the HttpWebRequest. After the Stream object has been returned, you can send data with the HttpWebRequest by using the Stream.Write method.

You must set the value of the ContentLength property before retrieving the stream.

You must call the Stream.Close method to close the stream and release the connection for reuse.


Если честно, не понимаю, как оно у вас сейчас это делает :(  Объясните, если не секрет.

Цитата(Servena @  15.11.2007,  14:39 Найти цитируемый пост)
Вообщем, проще тогда вручную впечатывать данные в форму.
  smile 


Это сообщение отредактировал(а) Zakonnic - 16.11.2007, 01:20
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
Servena
Дата 19.11.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



Законнику.
ОК, выкладываю часть работающего проекта.
Его можно сразу поместить в wwwroot, создать Веб-сайт и использовать. Так же там прилагается код библиотеки и уже скомпилированная библиотека. Если вы сами попытаетесь скомпилировать - в проекте в файле настроек AssemblyInfo.cs выставьте 
Код
[assembly: ComVisible(true)]
.

Пример выполняет элементарные действия: он создает выпадающий список всех существующих на компьютере RS-232 портов.

Если пример не заработал - выставьте разрешения для зоны, в которой у вас работает ИЕксплоер, в Пуск-Настройка-Панель управления-Администрирование - Microsoft .NET Framework 2.0 Configuration - My Computer - Runtime Security Policy - Machine - Code groups - All_Code - там будут перечислены зоны, выберите свою и через свойства выставьте, например, Full Trust.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  LibraryExample.rar 5,19 Kb
PM MAIL   Вверх
Zakonnic
Дата 19.11.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо! Я вживую с такими штуками не работал, так что это довольно интересно.

Посмотрел  smile  Там фактически то же, что и в первом посте. 
Несколько мыслей:

- Проще написать
AvailableRS232PortsDropDown=document.getElementById('<%=ddAvailableRS232Ports.ClientID %>');

- Как я понял, вы генерите HTML на джава, получая данные из объекта, а потом отсылаете через форму и метод POST. Собсно это меня и интересовало.

- У меня все работает. И даже в настройки дотнет не лазил (хм...). Вероятно, пользователи у которых это не работает, просто не являются локальными администраторами, поэтому в реестре лазить не могут. В этом случае отдельное приложение действительно ничем не лучше.

Happy End.

Это сообщение отредактировал(а) Zakonnic - 19.11.2007, 12:36
--------------------
...и никогда не пишите в комментариях правду
PM MAIL ICQ   Вверх
Servena
  Дата 19.11.2007, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

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



ОК, это для таких задач, которые не может решить Джаваскрипт (например, у него нет возможности узнать названия всех последовательных портов и тем более с ними работать).

Цитата

- Проще написать
AvailableRS232PortsDropDown=document.getElementById('<%=ddAvailableRS232Ports.ClientID %>');

Спасибо, попробую - потому что до этого АйДи передавалось через скрытое поле, а до этого - специальной джаваскрипт-функцией искался реальный АйДи, сейчас наш старший программер подсказал через литерал, но теперь попробую так.

Добавлено через 6 минут
С классом закончено. 
Следующая проблема с расположением библиотеки.
 smile Создам новый пост.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

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

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

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


 




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


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

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