Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Есть .NET сборка. Создаем экземпляр класса. Вызываем метод, который возвращает строку. И получаем ошибку... Опытным путем удалось установить, что ошибку вызывают строки длиной более 65КБ. (Есть ли возможность вернуть строку большей длины?) Поступил иначе. Сделал на выходе конвертацию в массив символов (str.ToCharArray()). В итоге в каше должен получится эксемпляр класса %Library.GlobalCharacterStream. Но вместо этого получаю ошибку <LIST>. Пробую сгенерировать тестовый массив, который заведомо больший, чем реальный: Код: plaintext 1. 2. Может каше не нравяться какие-то символы в массиве или еще что-то? Кто-нибудь сталкивался с подобным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 15:24 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Вобщем не нравятся каше в листе кириллические символы. Сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. Работает, но как-то говнокодисто вышло. Вопрос, можно ли вернуть строку >65КБ остается открытым... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 16:30 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
mys , что это за строки у тебя такие огромные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 16:37 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
веб-странички ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 16:41 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
А на вход нельзя подать строку более 32К. Как люблю я каше... ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2011, 16:50 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
mysА на вход нельзя подать строку более 32К. Как люблю я каше... ))) Restrictions mysПоступил иначе. Сделал на выходе конвертацию в массив символов (str.ToCharArray()). В итоге в каше должен получится эксемпляр класса %Library.GlobalCharacterStream. Но вместо этого получаю ошибку <LIST>. %Library.GlobalCharacterStream не использует $listbuild-ы внутри и поэтому не должен возвращать такую ошибку. Покажите полный код (включая определение) C#-метода и сгенерированный в Cache метод прокси-класса для него. mysвеб-странички Может лучше в этом случае не возвращать строки, а сразу объект System.Web.HttpResponse? (Это если потом эти страницы возвращаются клиентам Web-сервера.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2011, 10:30 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Turk%Library.GlobalCharacterStream не использует $listbuild-ы внутри и поэтому не должен возвращать такую ошибку. Покажите полный код (включая определение) C#-метода и сгенерированный в Cache метод прокси-класса для него. Ошибка не в %Library.GlobalCharacterStream. .NET класс Код: plaintext Сгенерировано кашей: Код: plaintext Ошибка: USER>s c=##class(Analyzer.Proxy).%New(gateway) USER>d c.Test() <LIST>%PostInvoke+2^Analyzer.Proxy.1 TurkМожет лучше в этом случае не возвращать строки, а сразу объект System.Web.HttpResponse? (Это если потом эти страницы возвращаются клиентам Web-сервера.) Перед тем как эти страницы возвращать их еще надо должным образом обработать. Обработать на стороне .NET, потому что в каше для этого нет ничего, кроме $L,$F,$P,$E и т.д.... В противном случае можно было бы просто использовать %Net.HttpRequest в каше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 10:16 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, как передать строку больше 32К из каше в .NET сборку вообще. 1. Просто с большой строкой оно не работает. (складывается впечатление, что эта хрень вообще не умеет передавать объекты больше 32К а не только строки) 2. Если побить строку по 32к и создать массив строк, который передавать в сборку, виснет DotNetGateway полностью... (если строка <32K и бьем кусками например по 4К, то работает) 3. Если создать %GlobalCharacterStream не понятно что получать на входе в моей сборке Если получаем char[], который следуя документации и логике мы и должны получать, ошибка: <METHOD DOES NOT EXIST>%WriteArray+11^Analyzer.Proxy.1 *Count,%Library.GlobalCharacterStream Еще бы, метода Count в потоках нет... Пробую получать System.IO.Stream, получаем ошибку: x="0 ‡џQНевозможно преобразовать объект типа "System.String" к типу "System.IO.Stream". в System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) в System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) в InterSystems.Data.CacheClient.Gateway.Gateway.executeInstanceMethod(MethodInfo method, String methodName, String oref) в InterSystems.Data.CacheClient.Gateway.Gateway.executeMethod() Т.е., выходит на вход приходит строка вида: "6@%Library.GlobalCharacterStream"... В примере от интерсистемз есть все, кроме передачи GlobalCharacterStream... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 17:17 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Не уверен, что мои наблюдения тут помогут, но как-то приходилось субмитить через %request огромные куски текста. Действительно, начиная с 32к приходит вместо строки ссылка на объект. Но в чем проблема, определаем ситуацию, например через $isobject и читаем данные из потока. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 17:49 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
%Request...это csp? Вобщем, сделал поле Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2011, 18:14 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
mys , Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. #dim clob As %GlobalCharacterStream=##class(%GlobalCharacterStream).%New() set s=$j(" ",32767) for i=1:1:62 d clob.Write(s) set tmp=##class(dll.MyClass).%New(GateWay) set r=tmp.getCharacterStream(.clob) w "Общий размер потока=",clob.Size,! w "Фактический размер возвращённых символов=",r,! w "Первые 100 символов потока=",clob.Read(100),! ... Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2011, 10:06 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Повторил ваш пример, получил все ту же ошибку: <METHOD DOES NOT EXIST>%WriteArray+11^Analyzer.Test.1 *Count,%Library.GlobalCharacterStream Какая у вас версия? У меня Cache for Windows (x86-32) 2009.1 (Build 378) Wed Mar 11 2009 20:57:11 EDT. Может в этом дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2011, 12:47 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
mysПовторил ваш пример, получил все ту же ошибку: <METHOD DOES NOT EXIST>%WriteArray+11^Analyzer.Test.1 *Count,%Library.GlobalCharacterStream Какая у вас версия? У меня Cache for Windows (x86-32) 2009.1 (Build 378) Wed Mar 11 2009 20:57:11 EDT. Может в этом дело?Зачем использовать одну из первых Field Test , когда есть Release ? PS: тестировал на 2011.1.FT1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2011, 13:33 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
Вы правы, надо обновиться )) Пробую запустить ваш пример на Cache for Windows (x86-32) 2010.2.3 (Build 702) Tue Feb 15 2011 14:33:55 EST Получаю: <LIST>%PostInvoke+2^%Net.Remote.Proxy.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2011, 13:58 |
|
||
|
DotNetGateway и большие строки
|
|||
|---|---|---|---|
|
#18+
mysВы правы, надо обновиться )) Пробую запустить ваш пример на Cache for Windows (x86-32) 2010.2.3 (Build 702) Tue Feb 15 2011 14:33:55 EST Получаю: <LIST>%PostInvoke+2^%Net.Remote.Proxy.1Используйте Unicode версию вместо 8-битной и всё будет работать. PS: на версии 2010.2.3.702 (Unicode) работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2011, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=39&gotonew=1&tid=1557769]: |
0ms |
get settings: |
4ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
8ms |
get first new msg: |
3ms |
get forum data: |
1ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 310ms |

| 0 / 0 |
