|
Практическое применение NET в 1С8 с помощью Serginio1 | ☑ | ||
---|---|---|---|---|
0
DES
27.06.16
✎
13:42
|
Есть https://api-test.fisc.md/Service.svc
Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf Напрямую с 1с8 не функциклирует. Но можно скачать код и с скомпилировать C# свою DLL, которую можно задействовать с помощью "обертки" от Serginio1 Использование классов .Net в 1С для новичков зарегистрировав её на сервере и с помощью нее получить доступ к DLL. Код DLL (частично) [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAcceptedInvoices", ReplyAction="http://tempuri.org/IService/GetAcceptedInvoicesResponse")] ServiceEfactura.ServiceReference.InvoicesResponse GetAcceptedInvoices(ServiceEfactura.ServiceReference.ActorBaseRequest request); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetAcceptedInvoices", ReplyAction="http://tempuri.org/IService/GetAcceptedInvoicesResponse")] System.Threading.Tasks.Task<ServiceEfactura.ServiceReference.InvoicesResponse> GetAcceptedInvoicesAsync(ServiceEfactura.ServiceReference.ActorBaseRequest request); начинаем в 1с8 Врап = Новый COMОбъект("NetObjectToIDispatch45"); //Врап.ЗаменитьConfigFile(ИмяФайлаDLL + ".config"); ИмяФайлаDLL = "D:\FilesNetObjectToIDispatch2\" + "ServiceEfactura.dll"; Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); namespace = "ServiceEfactura.ServiceReference."; Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); типСервера = Сборка.GetType(namespace + "ServiceClient"); привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-test.fisc.md/Service.svc target=""_blank"" rel=""nofollow"" class=""extralink"">https://api-test.fisc.md/Service.svc"; remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(типСервера,привязка,remoteAddress); UserName1 = сервер.ClientCredentials.UserName; UserName1.UserName = "DES"; UserName1.Password = "MyPass"; newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString(); ТипRequest = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoicesRequest"); ТипЛист = Врап.ПолучитьТип("System.Collections.Generic.List`1"); ТипInvoiceIndentificator = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoiceIndentificator"); Request = Врап.СоздатьОбъект(ТипRequest); ТипЛистОбъект = Врап.ТипКакОбъект(ТипЛист); ТипизированныйЛист = ТипЛистОбъект.MakeGenericType(ТипInvoiceIndentificator); SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист); SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator); SeriaAndNumber.Number = "000962811"; SeriaAndNumber.Seria = "EUG"; SeriaAndNumbers.Add(SeriaAndNumber); request.RequestId = newid; request.SeriaAndNumbers = SeriaAndNumbers.ToArray();; // _client = ?????????????????????? тут вопрос как ПолучитьКлиента(); // response = _client.GetAcceptedInvoices(request); вопрос как получить _client ? |
|||
1
Garykom
гуру
27.06.16
✎
13:50
|
>Но можно скачать код и с скомпилировать C# свою DLL
нафига нужна обертка от Serginio1? |
|||
2
Кирпич
27.06.16
✎
14:03
|
(1) видимо автор адепт секты мазохистов, возглавляемой Serginio1
|
|||
3
Serginio1
27.06.16
✎
14:05
|
Там же есть в инструкции
_client = new EFacturaApiRef.ServiceClient(); _client.ClientCredentials.UserName.UserName = "supplier"; _client.ClientCredentials.UserName.Password = "supplier"; |
|||
4
Serginio1
27.06.16
✎
14:07
|
(2) Ну да есть готовая библиотека которую можно использовать это мозахизм.
А переписывать на 1С совского Вэб сервис клиента это наше всё? |
|||
5
Garykom
гуру
27.06.16
✎
14:10
|
(4) Если есть исходники этой библиотеки то сделать нормальную ВК для 1С и не страдать
|
|||
6
Serginio1
27.06.16
✎
14:11
|
Кстати 1С не поддерживает <security mode="TransportWithMessageCredential" />
|
|||
7
Serginio1
27.06.16
✎
14:12
|
(5) А зачем масло маслянное?
|
|||
8
Garykom
гуру
27.06.16
✎
14:13
|
(7) Масло масляное это использовать спец код к универсальной ВК для работы с другой dll
|
|||
9
Garykom
гуру
27.06.16
✎
14:14
|
(7) ваша ВК отличная штука, но для данного случая избыточно и затратна
|
|||
10
Кирпич
27.06.16
✎
14:14
|
(4) зачем переписывать на 1с. можно скопипастить.
Автор, есть работающий пример на C#? |
|||
11
Serginio1
27.06.16
✎
14:15
|
(8) Это не ВК а нетовская DLL. А вот писать ВК с кучей объектов это как раз мозахизм.
(10) В шапке PDF |
|||
12
Serginio1
27.06.16
✎
14:17
|
3 + Тебе нужен либо
1. Сделать файл 1с.exe.config куда скопировать <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IService"> <security mode="TransportWithMessageCredential" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="https://api-test.fisc.md/Service.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" contract="E_FacturaService.IService" name="BasicHttpBinding_IService" /> </client> |
|||
13
Serginio1
27.06.16
✎
14:22
|
Либо положить этот файл рядом с DLL
Сборка=врап.загрузитьСборку(ИмяФайлаСборки); TChannel=Сборка.GetType("EFacturaApiRef.ServiceClient"); ConfigFile=ИмяФайлаСборки+".config"; endpointConfigurationName="E_FacturaService.IService"; endpointAddress=Неопределено; Клиент=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,endpointAddress); endpointConfigurationName="MorpherSoap"; endpointAddress=Неопределено; Клиент=врап.СоздатьКлиентаWCFConfigFile(ConfigFile,TChannel,endpointConfigurationName,endpointAddress); |
|||
14
Serginio1
27.06.16
✎
14:25
|
endpointConfigurationName="BasicHttpBinding_IService"
|
|||
15
Кирпич
27.06.16
✎
14:25
|
(0) Автор, ты сначала напиши тестовую программу, которая будет работать 100%, а потом уже рисуй в 1с эту галиматью с врапами. А то ты так до пасхи будешь высоким дотнет программированием заниматься.
|
|||
16
Serginio1
27.06.16
✎
14:27
|
||||
17
Serginio1
27.06.16
✎
14:32
|
(9) Я как раз и писал изначально для таких случаев.
Когда куча классов. Либо вручную через COM оборачивать либо автоматически. |
|||
18
Serginio1
27.06.16
✎
14:38
|
Или так
BasicHttpBinding=Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll"); binding = Врап.СоздатьОбъект(BasicHttpBinding,Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress","https://api-test.fisc.md/Service.svc"); _client = new EFacturaApiRef.ServiceClient(binding,addres); _client.ClientCredentials.UserName.UserName = "supplier"; _client.ClientCredentials.UserName.Password = "supplier"; |
|||
19
Garykom
гуру
27.06.16
✎
14:38
|
(17) Есть готовый код на C#, не вижу проблем повторить его в в 1С встроенными средствами.
Или вызывать этот готовый код на C# из 1С любым из 10-ка способов/методов, в т.ч. самым простейшим через КомандаСистемы |
|||
20
Serginio1
27.06.16
✎
14:39
|
(19) Угу вот это как раз мозахизм. Да и не поддерживает 1С TransportWithMessageCredential
|
|||
21
Serginio1
27.06.16
✎
14:41
|
(19) Сделай. Все для написания автор дал.
|
|||
22
Garykom
гуру
27.06.16
✎
14:43
|
(21) не плотют
|
|||
23
Serginio1
27.06.16
✎
14:44
|
_client= Врап.СоздатьТип("EFacturaApiRef.ServiceClient",binding,addres);
|
|||
24
Serginio1
27.06.16
✎
14:45
|
(22) За советы тоже не плотют. Дело в том, что мои советы то рабочие.
А вот твои ... |
|||
25
Serginio1
27.06.16
✎
14:49
|
Кстати это уже делали к 7 ке
API IE из 1с 7.7 |
|||
26
Serginio1
27.06.16
✎
14:52
|
Даже результат уже был получен
API IE из 1с 7.7 |
|||
27
DES
27.06.16
✎
16:24
|
(26) и благополучно потерян. ;(
|
|||
28
DES
27.06.16
✎
16:38
|
(18) ругается на _client = new EFacturaApiRef.ServiceClient(binding,addres);
хотелось бы обойтись без конфиг файлов... можно ? |
|||
29
Serginio1
27.06.16
✎
16:39
|
18+ _client= Врап.СоздатьТип("EFacturaApiRef.ServiceClient",binding,addres);
Ну и пространства имен соответствующие |
|||
30
DES
27.06.16
✎
17:08
|
сделал
BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll"); binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc"); _client = Врап.СоздатьТип("EFacturaApiRef.ServiceClient", binding, addres); в отладчике binding & addres - нормально выглядят. и получил {Форма.Форма.Форма(55)}: Метод объекта не обнаружен (СоздатьТип) _client = Врап.СоздатьТип("EFacturaApiRef.ServiceClient", binding, addres); |
|||
31
Serginio1
27.06.16
✎
17:10
|
ПолучитьТип
|
|||
32
Serginio1
27.06.16
✎
17:11
|
Но смотри какое у тебя пространство имен
|
|||
33
DES
27.06.16
✎
17:11
|
а почему тип, а не оъбект ?
|
|||
34
Serginio1
27.06.16
✎
17:12
|
Да СоздатьОбъект
|
|||
35
DES
27.06.16
✎
17:25
|
да, взлетело так:
BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll"); binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); addres = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc"); _client = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, addres); _client.ClientCredentials.UserName.UserName = "DES"; _client.ClientCredentials.UserName.Password = "myPass"; а response = _client.GetAcceptedInvoices(request); пишет {Форма.Форма.Форма(57)}: Ошибка при вызове метода контекста (GetAcceptedInvoices) response = _client.GetAcceptedInvoices(request); по причине: Неизвестная ошибка |
|||
36
Serginio1
27.06.16
✎
17:39
|
Попробуй для начала с Config файлом.
Покажи как заполняешь request string newid = Guid.NewGuid().ToString(); var request = new ActorBaseRequest { RequestId = newid }; var response = _client.GetAcceptedInvoices(request); foreach (var info in response.Results) { Console.WriteLine(info.Seria + " " + info.Number + " " + info.Xml + " Error Message: " + info.Message); } |
|||
37
Serginio1
27.06.16
✎
17:40
|
А что выводит при ошибке?
|
|||
38
Serginio1
27.06.16
✎
17:41
|
Пришли мне на почту обработку и DLL. Посмотрю.
|
|||
39
DES
28.06.16
✎
08:25
|
а туда ли я послал то?
|
|||
40
DES
28.06.16
✎
09:03
|
откатился на 1с 7.7
дает ошибку _client = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName, , _UserName_, _Password_); {Обработка.API_eFactutra.Форма.Модуль(27)}: System.Configuration: В файле конфигурации ServiceEfactura.dll.config отсутствует корневой тег <configuration> (D:\LX\ServiceEfactura.dll.config line 1) хотя там текст из документации |
|||
41
DES
28.06.16
✎
09:16
|
(40) не принимать к сведению (Прим. автор)
|
|||
42
Кирпич
28.06.16
✎
09:21
|
(40) похоже, вы (15) так и не приняли к сведению :)
а эта матня (е фактура) только в Молдавии работает или еще где? |
|||
43
Serginio1
28.06.16
✎
09:42
|
(39)Туда сейчас посмотрю.
Конечно лучше тестить в VS а затем переносить в 1С. |
|||
44
DES
28.06.16
✎
09:55
|
в 7 взлетело, но похоже не проходит идентификация
http://prntscr.com/bm0dlo |
|||
45
DES
28.06.16
✎
09:56
|
(42) принял, но не выбрал.
|
|||
46
DES
28.06.16
✎
09:59
|
(42) за "еще где" не знаю, но принципы работы явно не молдавского изобретения
|
|||
47
Кирпич
28.06.16
✎
10:00
|
(45) ты чо! вон даже ваш пастор так делает (43)
|
|||
48
DES
28.06.16
✎
10:06
|
Зафиксирую
Перем Врап, ИмяФайлаDLL, Сборка, типСервера, _client, response; Перем namespace, _UserName_, _Password_, request; Процедура ПриОткрытии() ИмяФайлаDLL = КаталогИБ() + "ServiceEfactura.dll"; namespace = "ServiceEfactura.ServiceReference."; Врап = СоздатьОбъект("NetObjectToIDispatch45"); Врап.УстЭтоСемерка(); Врап.ЗаменитьConfigFile(ИмяФайлаDLL+".config"); Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); типСервера = Сборка.GetType(namespace + "ServiceClient"); КонецПроцедуры Процедура ПослеСозданияФормы() ОчиститьОкноСообщений(); КонецПроцедуры Функция ПолучитьКлиента() TChannel = Сборка.GetType(namespace + "IService"); ConfigFile = ИмяФайлаDLL + ".config"; endpointConfigurationName = "BasicHttpBinding_IService"; _client = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName, , _UserName_, _Password_); Возврат _client КонецФункции Процедура ПолучитьДанные(_еЗапрос_)// Возвращает в response _client= ПолучитьКлиента(); //login = _client.ClientCredentials.UserName; //login.UserName = _UserName_; //login.Password = _Password_; Попытка Если _еЗапрос_ = "GetInvoicesBySeriaNumber" Тогда newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString(); ТипRequest = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoicesRequest"); ТипЛист = Врап.ПолучитьТип("System.Collections.Generic.List`1"); ТипInvoiceIndentificator = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoiceIndentificator"); ТипЛистОбъект = Врап.ТипКакОбъект(ТипЛист); ТипизированныйЛист = ТипЛистОбъект.MakeGenericType(ТипInvoiceIndentificator); SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист); SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator); SeriaAndNumber.Number = "000962811"; SeriaAndNumber.Seria = "EUG"; SeriaAndNumbers.Add(SeriaAndNumber); request = Врап.СоздатьОбъект(ТипRequest); request.RequestId = newid; request.SeriaAndNumbers = SeriaAndNumbers.ToArray();; response = _client.GetInvoicesBySeriaNumber(request); ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices1" Тогда ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices2" Тогда ИначеЕсли _еЗапрос_ = "GetAcceptedInvoices3" Тогда КонецЕсли; Исключение response = 0; Сообщить("."+_еЗапрос_+"() - ошибка получения информации.","!"); КонецПопытки; _client.Close(); КонецПроцедуры //---------------------------------------------------------------------- Процедура eFactura_GetAcceptedInvoices() Перем newid, типActorBaseRequest; newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString(); типActorBaseRequest = Врап.ПолучитьТип(namespace + "ActorBaseRequest"); request = Врап.СоздатьОбъект(типActorBaseRequest); request.RequestId = newid; ПолучитьДанные("GetInvoicesBySeriaNumber"); КонецПроцедуры //---------------------------------------------------------------------- Процедура Выполнить() _UserName_ = "DES"; _Password_ = "MyPass"; eFactura_GetAcceptedInvoices(); Если ПустоеЗначение(response)=1 Тогда Сообщить("Нет результата."); Иначе Сообщить("Есть результат."); КонецЕсли; КонецПроцедуры |
|||
49
Serginio1
28.06.16
✎
10:09
|
Ну молодец! Посрамил скептиков.
|
|||
50
Кирпич
28.06.16
✎
10:16
|
(49) скептики по прежнему считают, что без врапов будет код в восемь раз короче и результат будет в течение часа, а не недели.
|
|||
51
DES
28.06.16
✎
10:20
|
(49) да , нет. Похоже не создается канал с логином. Идет как аниномоус.
|
|||
52
DES
28.06.16
✎
10:26
|
зафиксирую для v8
Врап = Новый COMОбъект("NetObjectToIDispatch45"); ИмяФайлаСборки = "D:\FilesNetObjectToIDispatch2\" + "ServiceEfactura.dll"; Сборка = Врап.загрузитьСборку(ИмяФайлаСборки); namespace = "ServiceEfactura.ServiceReference."; типСервера = Сборка.GetType(namespace + "ServiceClient"); привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-test.fisc.md/Service.svc target=""_blank"" rel=""nofollow"" class=""extralink"">https://api-test.fisc.md/Service.svc"; remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(типСервера,привязка,remoteAddress); TChannel = Сборка.GetType(namespace + "IService"); ConfigFile = ИмяФайлаСборки + ".config"; endpointConfigurationName = "BasicHttpBinding_IService"; UserName = "DES"; Password = "MyPass"; Клиент = врап.СоздатьКлиентаWCFConfigFile(ConfigFile, TChannel, endpointConfigurationName,, UserName, Password); newid = Врап.ПолучитьТип("System.Guid").NewGuid().ToString(); ТипRequest = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoicesRequest"); ТипЛист = Врап.ПолучитьТип("System.Collections.Generic.List`1"); ТипInvoiceIndentificator = Врап.ПолучитьТип("ServiceEfactura.ServiceReference.InvoiceIndentificator"); Request = Врап.СоздатьОбъект(ТипRequest); ТипЛистОбъект = Врап.ТипКакОбъект(ТипЛист); ТипизированныйЛист = ТипЛистОбъект.MakeGenericType(ТипInvoiceIndentificator); SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист); SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator); SeriaAndNumber.Number = "000962811"; SeriaAndNumber.Seria = "EUG"; SeriaAndNumbers.Add(SeriaAndNumber); request.RequestId = newid; request.SeriaAndNumbers = SeriaAndNumbers.ToArray();; response = Клиент.GetInvoicesBySeriaNumber(request); но таже фигня, запускает как анонимуса, а для него там нет места. |
|||
53
Serginio1
28.06.16
✎
10:57
|
(50) Ну клава в руки и вперед.
Теоретики. |
|||
54
Serginio1
28.06.16
✎
10:58
|
(52) Сейчас нет времени потом посмотрю.
Обратись в поддержку. Можешь фиддлером посмотреть запрос и им отправить |
|||
55
Serginio1
28.06.16
✎
11:02
|
(50) При работе с 1С вским клиентом кода будет даже больше.
|
|||
56
DES
28.06.16
✎
11:06
|
(54) у них спросить невозможно, вероятно они не местные, а их каких-нибудь штатов...
|
|||
57
Кирпич
28.06.16
✎
11:16
|
(53) так это ты теоретик. практики не станут два раза писать одно и то же - сначала на C#, потом это всё в 1С переделывать.
|
|||
58
Serginio1
28.06.16
✎
12:00
|
(57) Угу а заполнять будешь как?
Теоретик. Кстати кода на C# даже будет больше SeriaAndNumbers = Врап.СоздатьОбъект(ТипизированныйЛист); SeriaAndNumber = Врап.СоздатьОбъект(ТипInvoiceIndentificator); SeriaAndNumber.Number = "000962811"; SeriaAndNumber.Seria = "EUG"; SeriaAndNumbers.Add(SeriaAndNumber); request.RequestId = newid; request.SeriaAndNumbers = SeriaAndNumbers.ToArray(); |
|||
59
Serginio1
28.06.16
✎
12:01
|
(56) Есть в любом случае служба поддержки. Просто на англицком. А логин и пароль правильные?
|
|||
60
DES
28.06.16
✎
12:02
|
(56) ну вроде бы логин и пароль сам создаешь, я еже 2 логина создал, ни один не подхватывается.
|
|||
61
DES
28.06.16
✎
12:04
|
(58) как в 1С будет выглядеть типа
var request = new TaxpayersRequest { FiscalCodes = new[] { "1003600106115", "1002600046027" }, RequestId = newid }; |
|||
62
DES
28.06.16
✎
12:07
|
сделал клиента по 2-м вариантам
КаталогФайлов = "D:\FilesNetObjectToIDispatch2\"; ИмяФайлаСборки = КаталогФайлов + "ServiceEfactura.dll"; ИмяФайлаКонфига = ИмяФайлаСборки + ".config"; NameSpace = "ServiceEfactura.ServiceReference."; СсылкаHTTPS = "https://api-test.fisc.md/Service.svc target=""_blank"" rel=""nofollow"" class=""extralink"">https://api-test.fisc.md/Service.svc"; endpointConfigurationName = "BasicHttpBinding_IService"; Врап = Новый COMОбъект("NetObjectToIDispatch45"); Сборка = Врап.ЗагрузитьСборку(ИмяФайлаСборки); #IF _ THEN ТипСервера = Сборка.GetType(NameSpace + "ServiceClient"); привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri", СсылкаHTTPS)); Сервер = Врап.СоздатьОбъект(типСервера, привязка, remoteAddress); IService = Сборка.GetType(NameSpace + "IService"); Клиент = врап.СоздатьКлиентаWCFConfigFile(ИмяФайлаКонфига, IService, endpointConfigurationName,, UserName, Password); #ELSE BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding","System.ServiceModel.dll"); binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc"); Клиент = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, address); Клиент.ClientCredentials.UserName.UserName = UserName; Клиент.ClientCredentials.UserName.Password = Password; #ENDIF Все равно одинаковая реакция, пишет про анонимуса |
|||
63
DES
28.06.16
✎
12:09
|
во втором варианте, под отладчиком, можно посмотреть COM-объект,
видно что поля с логином заполнены правильно. |
|||
64
Serginio1
28.06.16
✎
12:25
|
Кстати попробуй
BasicHttpsBinding и System.ServiceModel.BasicHttpsSecurityMode https://msdn.microsoft.com/ru-ru/library/system.servicemodel.basichttpsbinding(v=vs.110).aspx У тебя соединение по HTPS |
|||
65
Serginio1
28.06.16
✎
12:31
|
64 к 35
|
|||
66
DES
28.06.16
✎
12:32
|
{Форма.Форма.Форма(37)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки)
BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpsSecurityMode ","System.ServiceModel.dll"); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип System.ServiceModel.BasicHttpsSecurityMode в сборке C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.ServiceModel\v4.0_4.0.0.0__b77a5c561934e089\System.ServiceModel.dll |
|||
67
Serginio1
28.06.16
✎
12:40
|
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.basichttpssecuritymode(v=vs.110).aspx
System.ServiceModel.BasicHttpsSecurityMode |
|||
68
DES
28.06.16
✎
12:51
|
(67) ну вроде бы так и записано.
сделал еще так BasicHttpsBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpsBinding","System.ServiceModel.dll"); binding = Врап.СоздатьОбъект(BasicHttpsBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpsSecurityMode").TransportWithMessageCredential); address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc"); Клиент = Врап.СоздатьОбъект(namespace + "ServiceClient", binding, address); ошибки нет, но опять анонимоус входит |
|||
69
Serginio1
28.06.16
✎
13:15
|
Ну значит проблема с логин пароль. Ладно. Все времени нет.
Позже как появится на C# проверю. Можешь кстати и сам проверить. |
|||
70
DES
28.06.16
✎
15:10
|
как в 1с массив строк объявить ?
FiscalCodes = new[] {"1003600106115","1002600046027"} |
|||
71
Serginio1
28.06.16
✎
15:24
|
Проще так.
List=Врап.СоздатьОбъект("System.Collections.Generic.List`1[System.String]"); Список.Add("1003600106115"); Список.Add("1002600046027"); FiscalCodes=Список.ToArray(); Можно через safeArray врап.СоздатьМассив |
|||
72
DES
29.06.16
✎
18:37
|
Подскажите , где нужно проставить "https" в случае https ?
NameSpace = "ServiceEfactura.ServiceReference."; BasicHttpBinding = wrap.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding", "System.ServiceModel.dll"); Binding = wrap.СоздатьОбъект(BasicHttpBinding,wrap.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); Address = wrap.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-test.fisc.md/Service.svc"); Сlient = wrap.СоздатьОбъект(NameSpace + "ServiceClient", Binding, Address); Сlient.ClientCredentials.UserName.UserName = UserName; Сlient.ClientCredentials.UserName.Password = Password; |
|||
73
Serginio1
29.06.16
✎
19:56
|
По идее одно и тоже, только по умолчаию
The basicHttpsBinding is similar to basicHttpBinding, only it has the following defaults: •Security mode = Transport •Client credential type = None Ипользуй обычный, без s |
|||
74
DES
29.06.16
✎
20:09
|
да и так и так юзаю, бестолку...
техподдержке рассказываю где у них мануал по этому API лежит. |
|||
75
Garykom
гуру
29.06.16
✎
20:24
|
(74) Так понимаю сменить сервис на адекватный никак?
|
|||
76
Serginio1
29.06.16
✎
20:35
|
(74) А логин пароль получил как по инструкции?
|
|||
77
Serginio1
29.06.16
✎
20:38
|
Ты на сайте авторизируешься? https://servicii.fisc.md/
|
|||
78
Serginio1
29.06.16
✎
20:39
|
Вернее есть и на русском https://servicii.fisc.md/default.aspx
|
|||
79
Serginio1
29.06.16
✎
20:48
|
Попробуй еще
BasicHttpBinding .Security.Transport.ClientCredentialType = Врап.ПолучитьТип(" System.ServiceModel .HttpClientCredentialType").Basic; |
|||
80
Serginio1
29.06.16
✎
20:50
|
||||
81
Serginio1
29.06.16
✎
20:53
|
У тебя доступ к https://api-test.fisc.md/Service.svc?wsdl
Есть? |
|||
82
DES
29.06.16
✎
20:54
|
(77) ну ясный день, все там облазил и насоздавал API юзеров пачку.
Если не заполняю UserName - отвечает чтоб заполнил, а заполняю пишет что аноним |
|||
83
DES
29.06.16
✎
20:57
|
(81) Nu sunte?i autorizat s? accesa?i pagina dat?!
You are not allowed to see this page! |
|||
84
DES
29.06.16
✎
20:57
|
(81) хотя вроде я ж оттуда качал исходники ранее
|
|||
85
DES
29.06.16
✎
21:24
|
но исходники сборки есть
|
|||
86
Serginio1
29.06.16
✎
21:32
|
Видно это было давно. Узнай у них еще раз.
Тогда кстати работало? |
|||
87
DES
29.06.16
✎
21:34
|
VS оттуда же брал описание для DLL ?
|
|||
88
DES
29.06.16
✎
21:41
|
(79) попробовал так
Binding = wrap.СоздатьОбъект(BasicHttpBinding, wrap.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); Binding.Security.Transport.ClientCredentialType = wrap.ПолучитьТип(" System.ServiceModel.HttpClientCredentialType").Basic; |
|||
89
Serginio1
29.06.16
✎
21:55
|
Вот их новый адрес
https://api-efactura.fisc.md/Service.svc?wsdl И соотвеиственно адрес https://api-efactura.fisc.md/Service.svc"/ |
|||
90
Serginio1
29.06.16
✎
21:57
|
||||
91
DES
30.06.16
✎
07:47
|
(90) черт, ты прав!
|
|||
92
DES
30.06.16
✎
07:50
|
всмысле, спасибо.
|
|||
93
DES
30.06.16
✎
07:59
|
а как заюзать enumerator ?
Для Каждого Taxpayers Из response.Result Цикл |
|||
94
DES
30.06.16
✎
08:37
|
с енумератором решилось
вот еще бы расковырять цифроподпись, было бы совсем зашибись <Signatures> <SignatureContent> <SignedDoc> <hash Id="SignedContent">***</hash> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> <Reference URI="#SignedContent"> <Transforms> <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> </Transforms> <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <DigestValue>61AsgPxpXGRrz+52hs80BGbAgkg=</DigestValue> </Reference> </SignedInfo> Какой приблудой можно подписывать XMLs ? |
|||
95
DES
30.06.16
✎
10:24
|
а как COMSafeArray сохранить в файл ?
|
|||
96
Serginio1
30.06.16
✎
10:35
|
||||
97
Serginio1
30.06.16
✎
10:41
|
file = врап.ПолучитьТип("System.IO.File");
file.WriteAllBytes(path,ТвойCOMSafeArray); |
|||
98
DES
30.06.16
✎
10:55
|
или
StreamTypeEnum = Новый Структура("adTypeBinary, adTypeText", 1, 2); ConnectModeEnum = Новый Структура("adModeRead, adModeReadWrite, adModeRecursive, adModeShareDenyNone, |adModeShareDenyRead, adModeShareDenyWrite, adModeShareExclusive, |adModeUnknown, adModeWrite", 1, 3, 4194304, 16, 4, 8, 12, 0, 2); SaveOptionsEnum = Новый Структура("adSaveCreateNotExist, adSaveCreateOverWrite", 1, 2); StreamOut = Новый COMОбъект("ADODB.Stream"); StreamOut.Type = StreamTypeEnum.adTypeBinary; StreamOut.Mode = ConnectModeEnum.adModeReadWrite; //Нужны и чтение и запись. StreamOut.Open(); //Открыли на чтение и запись StreamOut.Write(Invoice.QRCode); StreamOut.SaveToFile(ИмяФайла, SaveOptionsEnum.adSaveCreateOverWrite); //"2" - перезапись файла StreamOut.Close(); |
|||
99
Serginio1
30.06.16
✎
10:58
|
Или
Convert=Врап.ПолучитьТип("System.Convert"); ДД=Base64Значение(Convert.ToBase64String(ТвойCOMSafeArray)); DES ты меня удивляешь. У тебя в руках вся мощь .Net а ты все смотришь на свой старый опыт. |
|||
100
Serginio1
30.06.16
✎
10:59
|
90+ Ты хоть возьмиь да и поизучай C#. Пригодится.
|
|||
101
DES
30.06.16
✎
11:05
|
(100) я не против изучать, но забываю уже капитально. Забыл как в 7 отладчик включать уже.
|
|||
102
Serginio1
30.06.16
✎
11:11
|
Запускаешь отладчик отдельно. Устанавливаешь точки останова.
Устанавливаешь в табло переменны |
|||
103
DES
30.06.16
✎
12:27
|
Если я хочу запускать все это на сервере, где
делать wrap = Новый COMОбъект("NetObjectToIDispatch45"); Сборка = wrap.ЗагрузитьСборку(ИмяФайлаСборки); перем Сборка потом нигде не используется ? |
|||
104
Serginio1
30.06.16
✎
13:12
|
Сборка загружается в домен и ты можешь использовать Врап.СоздатьОбъект
|
|||
105
DES
30.06.16
✎
13:42
|
В 1С8.3.8 грузится https://api-efactura.fisc.md/Service.svc?wsdl
а в 1C8.3.7 не грузится |
|||
106
DES
30.06.16
✎
14:35
|
Пробую через WSDL
Прокси = WSСсылки.eFactura.СоздатьWSПрокси(HTTP, "Service", "BasicHttpBinding_IService"); ТипWSПараметра = Прокси.ФабрикаXDTO.Пакеты.Получить(HTTP).Получить("GetTaxpayersInfo"); WSПараметр = Прокси.ФабрикаXDTO.Создать(ТипWSПараметра); У WSПараметр - есть свой параметр http://prntscr.com/bn02yr , как получить его тип ? |
|||
107
Serginio1
30.06.16
✎
15:00
|
||||
108
DES
30.06.16
✎
15:52
|
(107) Да. Спс. Зачитал. Кое как сварганил запрос по WS-ссылке.
Ругается на логин. Не пойму куда его втулить. |
|||
109
Serginio1
30.06.16
✎
15:57
|
(108) А 1С поддерживае авторизацию в отличии от Basic?
B и поддерживает протокол TransportWithMessageCredential? Удачи тебе в изысканиях. Пиши в поддержку 1С. |
|||
110
DES
30.06.16
✎
16:05
|
(109) ну вроде как
Прокси = WSСсылки.eFactura.СоздатьWSПрокси(HTTP, "Service", "BasicHttpBinding_IService"); Прокси.Пользователь = "DES"; Прокси.Пароль = "MyPass"; должно же... |
|||
111
Serginio1
30.06.16
✎
16:27
|
Создай отдельную ветку без упоминания .Net Многие пугаются этого слова.
|
|||
112
DES
30.06.16
✎
16:35
|
(111) гы...
|
|||
113
DES
30.06.16
✎
22:01
|
НЕ взлетело по WS-ссылке.
|
|||
114
DES
30.06.16
✎
22:49
|
что означает @ ?
InvoicesXml = @"<Documents> |
|||
115
Serginio1
30.06.16
✎
23:27
|
(114) Это фича C# можно строку писать без экранирования \\ и можно переносить строки без дополнительных кавычек.
|
|||
116
DES
01.07.16
✎
07:58
|
а как размер буфера увеличить , а то не влазит ответ сервера
http://prntscr.com/bncdug |
|||
117
Serginio1
01.07.16
✎
10:26
|
httpBinding.MaxReceivedMessageSize = 2147483647;
httpBinding.MaxBufferSize = 2147483647; |
|||
118
Serginio1
01.07.16
✎
10:28
|
httpBinding замени на то, что используешь привязка
|
|||
119
DES
01.07.16
✎
12:57
|
а как загружать сборку, чтобы с сервера.
(ну чтобы на клиентов не закидывать) |
|||
120
DES
01.07.16
✎
19:24
|
Чтобы сделать на клиенте
API_eFactura = Новый COMОбъект("NetObjectToIDispatch45"); Сборка_API_eFactura = API_eFactura.ЗагрузитьСборку(ИмяФайлаСборки); загнал DLL Сборки в Хранилище НоваяЗапись = РегистрыСведений.DLLs.СоздатьМенеджерЗаписи(); НоваяЗапись.Name = Файл.Имя; НоваяЗапись.Code = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя)); НоваяЗапись.Записать(); а на клиенте делаю НаборЗаписей = РегистрыСведений.DLLs.СоздатьНаборЗаписей(); Хранилище_API_eFactura = Запись.Code.Получить(); Хранилище_API_eFactura.Записать(Файл.ПолноеИмя); т.е. вытаскиваю файл из базы и записываю его в КаталогВременныхФайлов() потом оттуда уже Сборка_API_eFactura = API_eFactura.ЗагрузитьСборку(ИмяФайлаСборки); А можно сразу, минуя запись на диск, API_eFactura.ЗагрузитьСборку(Хранилище_API_eFactura) ? используя всю мощь .NET , или придется звать на помощь Fortran IV ? |
|||
121
Serginio1
01.07.16
✎
20:23
|
Минуя можно.
https://msdn.microsoft.com/ru-ru/library/h538bck7(v=vs.110).aspx стр=Base64Строка(ДвоичныеДанные); Assembly=Врап.ПолучитьТип("System.Reflection.Assembly"); Convert=Врап.ПолучитьТип("System.Convert"); массив=Convert.FromBase64String(стр); сборка=Assembly.Load(массив); |
|||
122
DES
01.07.16
✎
20:46
|
так это ж не быстрее записи на диск ?
|
|||
123
DES
01.07.16
✎
20:47
|
а зачем конвертить ?
|
|||
124
Serginio1
01.07.16
✎
21:41
|
Что чем конвертить?
Хранилище_API_eFactura это и есть двоичные данные |
|||
125
Serginio1
01.07.16
✎
21:43
|
Затем, что бы получить массив байтов. Можно перевести Двоичные даннык в строку Base64, а из неё массив байтов и из них получить сборку
|
|||
126
DES
01.07.16
✎
22:38
|
а можно загнать в Хранилище массив, чтобы избежать конвертаций ?
|
|||
127
Serginio1
02.07.16
✎
00:16
|
(126) Можешь. массив это SafeArray.
Массив1 = Новый Массив; // заполнение массива Массив1 значениями // ... Массив2 = Новый COMSafeArray(Массив1, "VT_UI1",5); Ну и выгрузить МассивЗначений = Массив.Выгрузить(); Про получить массив из файла File= врап.ПолучитьТип("System.IO.File"); массив=File.ReadAllBytes(path); А чего тебя так конвертации смущают? |
|||
128
DES
02.07.16
✎
00:31
|
ну так долго же
|
|||
129
Serginio1
02.07.16
✎
00:34
|
А ты замерял?
|
|||
130
DES
02.07.16
✎
09:55
|
Нет, но ЖП чую.
Запись на диск может быть быстрее, потому что просто сбрасывается в кеш буферов драйвера диска, и тут же читается из кеша, и это может быть быстрее чем побайтное преобразование того же объема инфы. |
|||
131
Serginio1
02.07.16
✎
10:09
|
Ты для начала попробуй. У тебя все для этого есть.
Ты так говоришь, как будто у тебя гигабайтный файл. Даже для мегабайтов, ты не заметишь разницы. Запись файла на дискв любом случае более затратная операция. Скорость побайтного преобразования помню еще на компьютерах 14 летней давности составляла сотни мегабай в секунду. |
|||
132
Serginio1
02.07.16
✎
15:59
|
Кстати для сервера нужно подавить Вывод диалоговых окон при ошибке
врап=новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке=ложь; попытка Врап.ВызватьКакойтоМетод(); Исключение Ошибка=врап.ПоследняяОшибка; СшибкаСтр=Врап.ВСтроку(Ошибка); // Записать в журнал регистрации, вернуть на клиента итд конецпопытки; |
|||
133
DES
03.07.16
✎
11:12
|
если создать _client - сколько он может висеть в бездействии?
|
|||
134
Serginio1
03.07.16
✎
11:32
|
А, что с ним будет? Главное, что бы ссылка на него была
|
|||
135
DES
03.07.16
✎
11:39
|
ну он может по тайм-ауту от сервера отваливаться
|
|||
136
Serginio1
03.07.16
✎
12:16
|
(135) Проверь. Посмотри свойства и методы ClientBase
https://msdn.microsoft.com/ru-ru/library/ms576141(v=vs.110).aspx |
|||
137
Serginio1
03.07.16
✎
12:23
|
Но обычная практика создавать клиента на каждый вызов.
Соединение кэшируется. Правда после вызова не забыть закрыть клиента. Например Close() или Врап.ЗакрытьРесурс(_client); |
|||
138
DES
03.07.16
✎
13:37
|
а по каким параметрам _client можно определить что его сделали Врап.ЗакрытьРесурс(_client) только что?
|
|||
139
DES
03.07.16
✎
13:39
|
_сlient.State - не читается из-под 1С
|
|||
140
DES
03.07.16
✎
16:40
|
а если нужно каждый раз создавать клиентаHTTP при каждом обращении через сервер, то нужно каждый раз делать
&насервере процедура гет() врап = Новый COMОбъект("NetObjectToIDispatch45"); загрузку сборки; создание клиентаHTTP; обращение; закрытие клиента; конецпроцедуры так ? |
|||
141
Serginio1
03.07.16
✎
17:05
|
Да
|
|||
142
DES
03.07.16
✎
17:11
|
а как лучше возвращать с сервера структуру результата?
переделывать ее в Структуру 1с8 ? |
|||
143
Serginio1
03.07.16
✎
17:12
|
Но вот сборку лучше грузить из файла. При загрузке через Load создается новая ассембли
|
|||
144
Serginio1
03.07.16
✎
17:14
|
(142) Разумеется. СОМ объекты не сериализуются. Вернее сожно самому сериализовать в JSON или XML но проще в 1С структуру
|
|||
145
DES
03.07.16
✎
17:37
|
а если возвращает массив ?
|
|||
146
Serginio1
03.07.16
✎
17:45
|
Масиив чего? Еще раз все масивы из .Net это минимум ComSafeArray или как COM обертка AutoWrap
|
|||
147
Serginio1
03.07.16
✎
17:48
|
Если алгоритм заполнения на клиенте, так и вызывай с клиента _сlient.
Если с сервера тогда заполняй данные на сервере. |
|||
148
DES
03.07.16
✎
18:00
|
(146) ну если врап вернул ComSafeArray двумерный , как его преобразовать в структуру чтобы вернуть клиенту? Делать структуру структур ?
|
|||
149
Serginio1
03.07.16
✎
18:21
|
Читай преобразование SafeArray в массив
|
|||
150
Serginio1
03.07.16
✎
18:48
|
Да и лучше использовать
Врап.ПолучитьТипИзСборки(string type, string путь); Сначала ищется тип в загруженных сборках. Если нет то загружается сборка и из неё уже получается тип |
|||
151
DES
03.07.16
✎
20:41
|
Переделал все под сервер
Загнал в Общий модуль, дал флаги Вызов сервера и Сервер Вызываю из обработки не как серверную, все нормально пишу перед процедурой &НаСервере в обработке пишет метод не обнаружен. {Обработка.API_eFactura.Форма.Форма.Форма(218)}: Метод объекта не обнаружен (GGGAPIeFactura) Рез = EFactura.GGGAPIeFactura("Test", Мессага); что не так то ? |
|||
152
DES
03.07.16
✎
21:19
|
привелигированный - тоже нужно ставить
|
|||
153
Serginio1
03.07.16
✎
21:47
|
А EFactura где определяешь?
|
|||
154
DES
03.07.16
✎
22:32
|
ОбщиеМодули
|
|||
155
DES
04.07.16
✎
20:20
|
с помощью врап создавать примитивные типы переменных ? ну там int или string ?
|
|||
156
Serginio1
04.07.16
✎
22:47
|
Зачем. Единственно, что ингда нужно создать тип, неподдерживаемый 1С. Для этого можно исползовать
Врап.ChangeType(string type, object valueOrig) |
|||
157
Serginio1
04.07.16
✎
22:50
|
int и string прекрасно передаются. Другое дело всякие byte, float, UInt32,UInt64.
Дело в том, что из-за перегрузок для поиска метода нужно точное соответсвие передаваемых типов |
|||
158
Serginio1
04.07.16
✎
23:10
|
Вот простые типы которые не нужно оборачивать
var list = new List<object>(); list.Add("System.String"); list.Add(AutoWrap.ОбернутьОбъект(DateTime.Now)); list.Add(AutoWrap.ОбернутьОбъект(true)); list.Add(AutoWrap.ОбернутьОбъект((System.Byte)45)); list.Add(AutoWrap.ОбернутьОбъект((System.Decimal)48.789)); list.Add(AutoWrap.ОбернутьОбъект((System.Double)51.51)); list.Add(AutoWrap.ОбернутьОбъект((System.Single)11.11)); list.Add(AutoWrap.ОбернутьОбъект((System.Int32)11)); list.Add(AutoWrap.ОбернутьОбъект((System.Int64)789988778899)); list.Add(AutoWrap.ОбернутьОбъект((System.SByte)45)); list.Add(AutoWrap.ОбернутьОбъект((System.Int16)66)); list.Add(AutoWrap.ОбернутьОбъект((System.UInt32)77)); list.Add(AutoWrap.ОбернутьОбъект((System.UInt64)88888888888888)); list.Add(AutoWrap.ОбернутьОбъект((System.UInt16)102)); |
|||
159
DES
05.07.16
✎
00:30
|
кажется они перестроили код с переходом на рабочую версию.
напомни плиз, какой класс(или что) добавлять в проект на VS, чтобы вытянуть их новый код DLL ? |
|||
160
Serginio1
05.07.16
✎
12:09
|
Надо зайти в VS, создать DLL и добавить ссылку на службу указать https://api-efactura.fisc.md/Service.svc?wsdl
|
|||
161
Serginio1
05.07.16
✎
12:11
|
Начни с API IE из 1с 7.7
|
|||
162
DES
05.07.16
✎
19:16
|
А можно как то получить список доступных функций в DDL и их параметры с типами ?
|
|||
163
Serginio1
05.07.16
✎
19:33
|
Ну вопервых в VS у тебя классы с методами. Если только DLL то смотри http://ilspy.net/
|
|||
164
DES
05.07.16
✎
21:06
|
если создать новую длл и прост заменить файл. взлетит?
|
|||
165
Serginio1
05.07.16
✎
22:37
|
Да. Но лучше сначала протестировать на шарпе
|
|||
166
DES
06.07.16
✎
09:25
|
а как выгрузить сборку ?
чтобы была возможность заменить длл |
|||
167
Serginio1
06.07.16
✎
09:41
|
Никак. Она не выгружается. Нужно перед тем как загружать сборку, заменить на нужныю
|
|||
168
DES
06.07.16
✎
09:52
|
я гружу сборку на сервере. т.е. каждое обращение к ней предваряется загрузкой сборки. Иначе никак. (потому что ссылка на врап мутабельна и не возвращается). Происходит ли сжирание памяти если грузить сборку каждый раз в процедуре которая &насервере?
|
|||
169
Serginio1
06.07.16
✎
10:14
|
(168) Ты 150 читал? Лучше использовать этот вариант, что бы не было сомнений
|
|||
170
DES
06.07.16
✎
10:26
|
не понял, причем (150)?
мне нужно обращаться к сервису, я гружу сборку. так как обращение идет с сервера, то приходится грузить сборку каждое обращение. Причем тут типы ? |
|||
171
Serginio1
06.07.16
✎
10:30
|
А из сборки ты получаешь тип?
|
|||
172
Serginio1
06.07.16
✎
10:31
|
Почитай повнимательнее тему Использование классов .Net в 1С для новичков
И поверь я знаю о чем говорю |
|||
173
DES
06.07.16
✎
10:34
|
я не сомневаюсь, просто ответь - жрет память если грузить в цикле в процедуре с локальными переменными ?
|
|||
174
Serginio1
06.07.16
✎
10:48
|
Еще раз при использовании
Врап.ПолучитьТипИзСборки(string type, string путь); Сначала ищется тип в загруженных сборках. Если не находит, то загружает сборку. После этого, для получения типов и объектов, не нужно указывать тип. |
|||
175
Serginio1
06.07.16
✎
10:50
|
Вместо
Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); типСервера = Сборка.GetType(namespace + "ServiceClient"); ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient"), ИмяФайлаDLL); |
|||
176
Serginio1
06.07.16
✎
10:51
|
Вместо используй
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL); |
|||
177
Serginio1
06.07.16
✎
10:52
|
Понятно?
|
|||
178
DES
06.07.16
✎
10:53
|
у меня одна сборка, нужные типы только в ней
&atclient для ш=1 по 1000000 цикл вызватьпроц() конеццикла &atserver процедура вызватьпроц() Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); конецпроцедуры я про эту ситуацию, спрашиваю. память закончится быстро? |
|||
179
DES
06.07.16
✎
10:56
|
на клиенте - все понятно.
я про сервер спрашиваю |
|||
180
DES
06.07.16
✎
11:06
|
&atserver
процедура вызватьпроц() врап = Новый ..... Сборка = Врап.загрузитьСборку(ИмяФайлаDLL); конецпроцедуры имеется ли смысл переделывать &atserver процедура вызватьпроц() врап = Новый ..... ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL); конецпроцедуры |
|||
181
Serginio1
06.07.16
✎
11:09
|
Еще раз зачем ты грузишь сборку на сервере?
Почему не используешь ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL); (180) Имеет. https://msdn.microsoft.com/ru-ru/library/1009fa28(v=vs.110).aspx Если сборка с тем же идентификатором уже загружен, LoadFrom возвращает загруженную сборку, даже если был указан другой путь. •Если сборка загружается с LoadFrom, а позже сборка в контексте загрузки предпринимает попытку загрузить ту же сборку по отображаемому имени, попытка загрузки завершится неудачей.Это может произойти при десериализации сборки. •Если сборка загружается с LoadFrom, и путь поиска сборок содержит сборки с тем же идентификатором, но другое расположение, InvalidCastException, MissingMethodException, или другие непредвиденные ситуации может произойти. |
|||
182
DES
06.07.16
✎
11:16
|
гружу на сервере, потому что она мне нужна на сервере.
гружу в процедуре обращения к сервису, т.к. думаю что после завершения процедуры сборка не активна. |
|||
183
Serginio1
06.07.16
✎
11:20
|
(182) Она загружена в процессы. Поэтому еще раз лучше использовать
ТипСервера=Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ИмяФайлаDLL); |
|||
184
DES
06.07.16
✎
16:01
|
в dll-ке есть описание
[System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.SeriaNumberRequest))] [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesRequest))] [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesContentRequest))] пишу код запрос = _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + "InvoicesRequest")); нормально завершается а пишу запрос = _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + "InvoicesContentRequest")); дает ошибку по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип ServiceEfactura.ServiceReference.InvoicesContentRequest как понимать ? |
|||
185
Serginio1
06.07.16
✎
18:11
|
Скинь DLL посмотрю
|
|||
186
Serginio1
06.07.16
✎
18:12
|
Достаточно тип указать строкой
запрос = _Врап.СоздатьОбъект("ServiceEfactura.ServiceReference." + "InvoicesContentRequest"); |
|||
187
DES
06.07.16
✎
18:49
|
{ОбщийМодуль.EFactura.Модуль(121)}: Ошибка при вызове метода контекста (СоздатьОбъект)
Request = Врап.СоздатьОбъект(NameSpace + "InvoicesContentRequest"); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип ServiceEfactura.ServiceReference.InvoicesContentRequest |
|||
188
Serginio1
06.07.16
✎
19:52
|
Значит его нет, или он в другой сборке
|
|||
189
DES
06.07.16
✎
20:32
|
100 раз проверил - есть.
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")] [System.Runtime.Serialization.DataContractAttribute(Name="InvoicesRequest", Namespace="http://schemas.datacontract.org/2004/07/AX.EFactura.Model.ApiModel")] [System.SerializableAttribute()] [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.InvoicesContentRequest))] [System.Runtime.Serialization.KnownTypeAttribute(typeof(ServiceEfactura.ServiceReference.AcceptedRequest))] public partial class InvoicesRequest : ServiceEfactura.ServiceReference.BaseRequest { |
|||
190
DES
06.07.16
✎
20:35
|
||||
191
Serginio1
06.07.16
✎
21:59
|
А в VS проверял? Может не та DLL или тпи приватный?
KnownTypeAttribute говорит, что класс InvoicesRequest имеет метод с параметром object[] и одним из типов InvoicesContentRequest. Зачем ты его создаешь? |
|||
192
Serginio1
06.07.16
✎
22:01
|
Заходишь в VS и смотришь где и как определен InvoicesContentRequest
А вообще сначала тестишь в приложении .Net, а затем переносишь на 1С. |
|||
193
DES
06.07.16
✎
22:37
|
это это же скачанная служба.
Другие, иные методы работают. В них тоже используется типы из этой же сборки. Один раз и этот метод сработал, под отладчиком, я посмотрел в отладчике его структуру даже. А потом стало глючить |
|||
194
Serginio1
06.07.16
✎
23:21
|
В отладчике под 1С? Бери в руки VS.
|
|||
195
Serginio1
06.07.16
✎
23:23
|
Кроме того для сервера смотри (132)
|
|||
196
Serginio1
07.07.16
✎
07:05
|
Попробуй использовать вместо ссылки на службу, сделать веб ссылку использующую технологию веб служб .Net FrameWork 2.0
Аналогично помогло здесь Помощь с Web сервисом Да и вэб ссылка надежнее. Добавление веб-ссылки https://msdn.microsoft.com/ru-ru/library/ms169816(v=sql.120).aspx |
|||
197
Serginio1
07.07.16
✎
09:41
|
Не знаю, что у тебя не получается. Специально создал сборку
врап=новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке=ложь; ПространствоИмен="efactura.ServiceReference1."; ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll"; InvoicesContentRequest=Врап.ПолучитьТипИзСборки(ПространствоИмен+"InvoicesContentRequest",ПутьКФайлу); Док=Врап.СоздатьОбъект(InvoicesContentRequest); Док.ActorRole=1; Сообщить(Док.ActorRole); Все прекрасно работает |
|||
198
DES
07.07.16
✎
09:44
|
перестроил dll, http://prntscr.com/bptjy8
пишу новый адрес при создании, а получается тестовый адрес. И не могу создать клиента myCredentials = Врап.СоздатьОбъект("System.Net.NetworkCredential",_UserName,_Password); // Create a webrequest with the specified URL. url = "https://api-efactura.fisc.md"; СlientEFactura = Врап.СоздатьОбъект(Врап.ПолучитьТипИзСборки(NameSpace + "ServiceClient", ФайлСборки.ПолноеИмя)); СlientEFactura.ClientCredentials = myCredentials.GetCredential(Врап.СоздатьОбъект("System.Uri",url), "Basic"); пишет {ОбщийМодуль.EFactura.Модуль(73)}: Поле объекта недоступно для записи (ClientCredentials) СlientEFactura.ClientCredentials = myCredentials.GetCredential(Врап.СоздатьОбъект("System.Uri",url), "Basic"); |
|||
199
Serginio1
07.07.16
✎
10:14
|
(198) А ты ему подсовывал https://api-efactura.fisc.md/Service.svc?wsdl
И где прописываешь адрес. Еще раз я 197 сделал сборку и добавил ссылку на службу https://api-efactura.fisc.md/Service.svc?wsdl СlientEFactura.ClientCredentials это для веб ссылку. Покажи весь код я у себя проверю |
|||
200
Serginio1
07.07.16
✎
10:19
|
Вот код привязки
врап=новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке=ложь; ПространствоИмен="efactura.ServiceReference1."; ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll"; привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc"; ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(ServiceClient,привязка,remoteAddress); UserName1 = сервер.ClientCredentials.UserName; UserName1.UserName = Логин UserName1.Password = пароль; |
|||
201
DES
07.07.16
✎
10:32
|
(199) ну так я перестроил для web-ссылки.
|
|||
202
Serginio1
07.07.16
✎
10:39
|
Что то ты не сделал. У меня работает и по ссылке на службу.
Покажи код который не работает. Я из-за тебя не выспался. |
|||
203
Serginio1
07.07.16
✎
10:40
|
И времени у меня мало.
|
|||
204
DES
07.07.16
✎
10:49
|
Функция API_eFactura(_ИмяФункции, _ПараметрыФункции, _UserName="", _PassWord="") Экспорт // GetLogs from SIA E-Factura
Перем ПутьКФайлуСборки, ИмяФайлаСборки, ФайлСборки, врап, Сборка_API_eFactura, DLLs; Перем Http, NameSpace, BasicHttpsBinding, Binding, Address; Перем UserName, PassWord; Перем Request, Ответ, Результат; Результат = Неопределено; ИмяФайлаСборки = "ServiceEfactura.dll"; ПутьКФайлуСборки = КаталогВременныхФайлов() + ИмяФайлаСборки; ФайлСборки = Новый Файл(ПутьКФайлуСборки); Если ФайлСборки.Существует() Тогда Врап = Новый COMОбъект("NetObjectToIDispatch45"); NameSpace = "ServiceEfactura.ServiceReference."; Попытка Сборка_API_eFactura = Врап.ПолучитьТипИзСборки(namespace + "ServiceClient", ФайлСборки.ПолноеИмя); Исключение Сборка_API_eFactura = Неопределено; КонецПопытки; КонецЕсли; Если Сборка_API_eFactura=Неопределено Тогда // Сообщить("Сервис API eFactura недоступен. Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf"); Возврат Неопределено; Иначе UserName = "DES"; PassWord = "MyPass"; Http = "Https"; BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.Basic" + Http + "Binding", "System.ServiceModel.dll"); Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.Basic" + Http + "SecurityMode").TransportWithMessageCredential); Binding.MaxBufferSize = 2147483647; Binding.MaxReceivedMessageSize = 2147483647; Address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-efactura.fisc.md"); Попытка СlientEFactura = Врап.СоздатьОбъект(NameSpace + "ServiceClient", Binding, Address); СlientEFactura.ClientCredentials.UserName.UserName = ?(ПустаяСтрока(_UserName), UserName, _UserName); СlientEFactura.ClientCredentials.UserName.Password = ?(ПустаяСтрока(_Password), PassWord, _Password); Исключение EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка); СlientEFactura = Неопределено; КонецПопытки; Если НЕ СlientEFactura=Неопределено Тогда Если _ИмяФункции="Test" Тогда #Область Test Request = "TEST"; Ответ = СlientEFactura.Test(Request); Результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp); #КонецОбласти ИначеЕсли _ИмяФункции="GetInvoicesContentForPrint" Тогда #Область GetInvoicesContentForPrint Request = Врап.СоздатьОбъект(NameSpace + "InvoicesContentRequest"); SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator"))); SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator"); SeriaAndNumber.Seria = _ПараметрыФункции.Seria; SeriaAndNumber.Number = _ПараметрыФункции.Number; SeriaAndNumbers.Add(SeriaAndNumber); Request.SeriaAndNumbers = SeriaAndNumbers.ToArray(); Request.ActorRole = _ПараметрыФункции.ActorRole; Request.Orientation = _ПараметрыФункции.Orientation; Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetInvoicesContentForPrint(Request); Исключение Ответ = Неопределено; КонецПопытки; Если Ответ=Неопределено Тогда Возврат Неопределено; Иначе // Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType); КонецЕсли; #КонецОбласти ИначеЕсли _ИмяФункции="GetTaxpayersInfo" Тогда #Область GetTaxpayersInfo Request = врапОбъект(Врап, "TaxpayersRequest"); FiscalCodes = Врап.СоздатьОбъект("System.Collections.Generic.List`1[System.String]"); FiscalCodes.Add(_ПараметрыФункции.IDNO); Request.FiscalCodes = FiscalCodes.ToArray(); Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetTaxpayersInfo(Request); Исключение Ответ = Неопределено; КонецПопытки; Если НЕ Ответ=Неопределено Тогда Для Каждого Taxpayer Из Ответ.Results Цикл Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType); КонецЦикла; КонецЕсли; #КонецОбласти ИначеЕсли _ИмяФункции="GetSeriaAndNumbers" Тогда #Область GetSeriaAndNumbers // Request = врапОбъект(Врап, "SeriaNumberRequest"); Request = Врап.СоздатьОбъект("ServiceEfactura.ServiceReference." + "SeriaNumberRequest"); Request.Count = _ПараметрыФункции.Count; Request.InvoiceType = _ПараметрыФункции.InvoiceType; Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetSeriaAndNumbers(Request); Исключение Ответ = Неопределено; КонецПопытки; Если НЕ Ответ=Неопределено Тогда Для Каждого Taxpayer Из Ответ.Results Цикл // Результат = Новый Структура("Address,ExistInTaxRegistry,IDNO,IsEFacturaActor,Name,TaxpayerType",Taxpayer.Address,Taxpayer.ExistInTaxRegistry,Taxpayer.IDNO,Taxpayer.IsEFacturaActor,Taxpayer.Name,Taxpayer.TaxpayerType); КонецЦикла; КонецЕсли; #КонецОбласти ИначеЕсли _ИмяФункции="GetInvoicesQRcodes" Тогда #Область GetInvoicesQRcodes Request = врапОбъект(Врап, "InvoicesRequest"); SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator"))); SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator"); SeriaAndNumber.Seria = _ПараметрыФункции.Seria; SeriaAndNumber.Number = _ПараметрыФункции.Number; SeriaAndNumbers.Add(SeriaAndNumber); Request.SeriaAndNumbers = SeriaAndNumbers.ToArray(); Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetInvoicesQRcodes(Request); Исключение Ответ = Неопределено; КонецПопытки; Если Ответ=Неопределено Тогда Результат = Неопределено Иначе Результат = Ответ; КонецЕсли; #КонецОбласти ИначеЕсли _ИмяФункции="GetInvoicesBySeriaNumber" Тогда #Область GetInvoicesBySeriaNumber Request = врапОбъект(Врап, "InvoicesRequest"); SeriaAndNumbers = Врап.СоздатьОбъект(Врап.ТипКакОбъект(Врап.ПолучитьТип("System.Collections.Generic.List`1")).MakeGenericType(Врап.ПолучитьТип(NameSpace + "InvoiceIndentificator"))); SeriaAndNumber = врапОбъект(Врап, "InvoiceIndentificator"); SeriaAndNumber.Seria = _ПараметрыФункции.Seria; SeriaAndNumber.Number = _ПараметрыФункции.Number; SeriaAndNumbers.Add(SeriaAndNumber); Request.SeriaAndNumbers = SeriaAndNumbers.ToArray(); Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetInvoicesBySeriaNumber(Request); Исключение Ответ = Неопределено; КонецПопытки; Если Ответ=Неопределено Тогда Результат = Неопределено Иначе Для Каждого Invoice Из Ответ.Results Цикл InvoiceStatus = Invoice.InvoiceStatus; Xml = Invoice.Xml; Прервать; КонецЦикла; Результат = Новый Структура("InvoiceStatus,Xml", InvoiceStatus, Xml); КонецЕсли; #КонецОбласти ИначеЕсли _ИмяФункции="GetInvoicesForSigning" Тогда #Область GetInvoicesForSigning #КонецОбласти ИначеЕсли _ИмяФункции="GetAcceptedInvoices" Тогда #Область GetAcceptedInvoices #КонецОбласти ИначеЕсли _ИмяФункции="GetRejectedInvoices" Тогда #Область GetRejectedInvoices #КонецОбласти ИначеЕсли _ИмяФункции="PostRejectedInvoices" Тогда #Область PostRejectedInvoices #КонецОбласти ИначеЕсли _ИмяФункции="PostAcceptedInvoices" Тогда #Область PostAcceptedInvoices #КонецОбласти ИначеЕсли _ИмяФункции="PostCanceledInvoices" Тогда #Область PostCanceledInvoices #КонецОбласти ИначеЕсли _ИмяФункции="PostInvoices" Тогда #Область PostInvoices #КонецОбласти ИначеЕсли _ИмяФункции="SearchInvoices" Тогда #Область SearchInvoices #КонецОбласти ИначеЕсли _ИмяФункции="GetLogs" Тогда #Область GetLogs Request = врапОбъект(Врап, "LogsRequest"); Request.From = _ПараметрыФункции.From; Request.To = _ПараметрыФункции.To; Request.RequestId = Строка(Новый УникальныйИдентификатор()); Попытка Ответ = СlientEFactura.GetLogs(Request); Исключение Ответ = Неопределено; КонецПопытки; Если НЕ Ответ=Неопределено Тогда Если Ответ.Results.Length>0 Тогда Результат = Новый Массив(Ответ.Results.Length, 6); й = 0; Для Каждого Стр Из Ответ.Results Цикл Результат[й][0] = Стр.Method; Результат[й][1] = Стр.Username; Результат[й][2] = Стр.StartDateTime; Результат[й][3] = Стр.Status; Результат[й][4] = Стр.Response; Результат[й][5] = Стр.Error; й = й + 1; КонецЦикла; Иначе Результат = Неопределено; КонецЕсли; КонецЕсли; #КонецОбласти КонецЕсли; КонецЕсли; КонецЕсли; Врап.ЗакрытьРесурс(СlientEFactura); Возврат Результат; КонецФункции |
|||
205
Serginio1
07.07.16
✎
11:07
|
Давай по порядку
врап=новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке=ложь; ПространствоИмен="efactura.ServiceReference1."; ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll"; BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.BasicHttpBinding", "System.ServiceModel.dll"); Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.BasicHttpSecurityMode").TransportWithMessageCredential); Binding.MaxBufferSize = 2147483647; Binding.MaxReceivedMessageSize = 2147483647; СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc"; ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); СlientEFactura = Врап.СоздатьОбъект(ServiceClient,Binding,remoteAddress); UserName1 = СlientEFactura.ClientCredentials.UserName; UserName1.UserName = UserName; UserName1.Password = PassWord; Попытка Request = "TEST"; Ответ = СlientEFactura.Test(Request); результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp); исключение сообщить(Врап.Встроку(Врап.ПоследняяОшибка)); КонецПопытки; |
|||
206
Serginio1
07.07.16
✎
11:08
|
СlientEFactura.Test такого метода нет.
Какой еще метод не работает? |
|||
207
DES
07.07.16
✎
11:11
|
ЕСТЬ.
Не работает потому что не залогинился, я не могу дать пароли |
|||
208
DES
07.07.16
✎
11:12
|
метод TEST возвращает логин при любом входящем параметре.
|
|||
209
DES
07.07.16
✎
11:16
|
а скинь твою DLL мне, плиз
|
|||
210
DES
07.07.16
✎
11:16
|
в смысле: efactura.dll
|
|||
211
Serginio1
07.07.16
✎
11:18
|
Да есть. Тогда ничем помочь не могу.
А что это за народное творчество EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка); Ты возвращай ошибки а не скрывай их |
|||
212
DES
07.07.16
✎
11:19
|
(211) - это обработка ошибки, а что ?
набрал твой код врап = новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке = ложь; ПространствоИмен = "efactura.ServiceReference1."; ПутьКФайлу = "D:\ServiceEfactura\ClassLibrary2\ClassLibrary2\bin\Release\ServiceEfactura.dll"; привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc";; ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(ServiceClient,привязка,remoteAddress); UserName1 = сервер.ClientCredentials.UserName; UserName1.UserName = UserName; UserName1.Password = PassWord; дает {ОбщийМодуль.EFactura.Модуль(554)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки) ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип efactura.ServiceReference1.ServiceClient в сборке C:\Program Files\FilesNetObjectToIDispatch2\ServiceEfactura.dll похоже dll-ки разные. |
|||
213
Serginio1
07.07.16
✎
11:21
|
Правильно у тебя другое пространство имен
|
|||
214
Serginio1
07.07.16
✎
11:25
|
То есть у тебя общий модуль
EFactura. С методом ОбработкаОшибкиСlientEFactura Только у СlientEFactura нет свойства ПоследняяОшибка (СlientEFactura.ПоследняяОшибка); Есть Врап.ПоследняяОшибка |
|||
215
Serginio1
07.07.16
✎
11:27
|
Да кстати отправил
|
|||
216
DES
07.07.16
✎
11:30
|
взял твою сборку и твой код и мой путь к файлу сборки
врап = новый COMОбъект("NetObjectToIDispatch45"); // врап.ВыводитьСообщениеОбОшибке = ложь; ПространствоИмен = "efactura.ServiceReference1."; ПутьКФайлу = "D:\FilesNetObjectToIDispatch2\efactura.dll"; привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc";; ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(ServiceClient,привязка,remoteAddress); UserName1 = сервер.ClientCredentials.UserName; UserName1.UserName = UserName; UserName1.Password = PassWord; дает {ОбщийМодуль.EFactura.Модуль(554)}: Ошибка при вызове метода контекста (ПолучитьТипИзСборки) ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); по причине: Произошла исключительная ситуация (mscorlib): Не удалось загрузить файл или сборку "file:///D:\FilesNetObjectToIDispatch2\efactura.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515) |
|||
217
DES
07.07.16
✎
11:36
|
у тебя FW 4,6,1 - у меня 4,5,1 - может в этом дело ?
|
|||
218
Serginio1
07.07.16
✎
11:37
|
У тебя какая версия NetObjectToIDispatch
возьми последнюю отсюда http://files.rsdn.ru/19608/%d0%a4%d0%b0%d0%b9%d0%bb%d1%8bNetObjectToIDispatch.zip И .Net 4.6.1 |
|||
219
DES
07.07.16
✎
11:38
|
так ты скинул dll c ссылкой на web-службу ?
|
|||
220
Serginio1
07.07.16
✎
11:41
|
Я загрузил данные по https://api-efactura.fisc.md/Service.svc?wsdl
Можешь посмотреть в VS через настроить ссылку на службу |
|||
221
DES
07.07.16
✎
11:42
|
так на службу или на веб-службу ?
|
|||
222
Serginio1
07.07.16
✎
12:19
|
На службу. Все типы видны.
|
|||
223
DES
07.07.16
✎
13:09
|
... может я *.config файлы недобрасываю.
(я надеюсь что они не используются.) |
|||
224
Serginio1
07.07.16
✎
13:37
|
Они не используются.
Все задается здесь привязка = Врап.СоздатьОбъект("System.ServiceModel.BasicHttpBinding,System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); СсылкаHTTPS = "https://api-efactura.fisc.md/Service.svc";;; ServiceClient=Врап.ПолучитьТипИзСборки(ПространствоИмен+"ServiceClient",ПутьКФайлу); remoteAddress = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress",Врап.СоздатьОбъект("System.Uri",СсылкаHTTPS)); сервер = Врап.СоздатьОбъект(ServiceClient,привязка,remoteAddress); |
|||
225
DES
07.07.16
✎
15:28
|
упорно говорит что твой проект 4,6,1, который не установлен на данном компе
, хотя, http://prntscr.com/bpx7sb и я снес FW4.5 обновил комп до невозможности и FW4.5.2 и FW4.6.1 установились и обновились, что не пойму, что еще надо. VS2013 тоже обновил |
|||
226
Serginio1
07.07.16
✎
16:39
|
У меня VS2015 Update 3
|
|||
227
Serginio1
07.07.16
✎
16:42
|
Кстати ты на сервере при завершении метода
делай сервер.Close(); Или Врап.ЗакрытьРесурс(сервер); То же самое ПриЗакрытии в обработке |
|||
228
DES
07.07.16
✎
17:12
|
поставил 4.6.2, всеодно VS не дает выбрать более 4.5.1
ну и не пойму, один метод срабатывает , а другой нет. а твоя dll даже не загружается. |
|||
229
Serginio1
07.07.16
✎
17:21
|
Еще раз ставь VS2015 Update 3
Пятьнадцать |
|||
230
Beretta
07.07.16
✎
17:23
|
(229) Через пару недель, когда ТС наконец-то, надеюсь, решит задачу, надо будет пройтись по этой теме и собрать все прямые и косвенные требования к супер-технологии практического применения NET в 1С8 с помощью Serginio1.
Интересный список получится, я думаю. |
|||
231
Serginio1
07.07.16
✎
17:29
|
(230) Требования внимательно прочитать http://catalog.mista.ru/public/448668/
Ну и желательно сначала тестить в VS. В справке есть подробное описание, что и как делать. Например https://msdn.microsoft.com/ru-ru/library/dd673931(v=vs.110).aspx Более сложные задачи могу я подсказать или получить информацию на http://ru.stackoverflow.com/ |
|||
232
Serginio1
07.07.16
✎
17:34
|
||||
233
Serginio1
07.07.16
✎
17:40
|
232 Не посмотрел это ссылка web службу. В некоторых случаях предпочтительнее использовать её с разного рода кривыми сервисами.
Желательно работать со ссылками на службу https://msdn.microsoft.com/ru-ru/library/bb628652.aspx |
|||
234
DES
07.07.16
✎
18:05
|
Вот как понять, если делаю в VS добавить ссылку на службу - то виду метод Test. Если делаю добавить службу, то метода не видно. (Ты и сам сказал что нет такого метода.)
|
|||
235
Serginio1
07.07.16
✎
18:06
|
Есть. Я неправильно посмотрел
|
|||
236
Serginio1
07.07.16
✎
18:06
|
А что такое Если делаю добавить службу
|
|||
237
Serginio1
07.07.16
✎
18:08
|
Посмотри у ServiceClient есть Test
|
|||
238
DES
07.07.16
✎
18:13
|
да есть, я знаю. Его и в 1с WS-ссылки видно
|
|||
239
DES
07.07.16
✎
18:14
|
создание клиента при одинаков для web и просто службы?
я и то и то запилил в dll http://prntscr.com/bpzfhs |
|||
240
DES
07.07.16
✎
18:15
|
а пункт Class1.cs можно удалить ?
|
|||
241
Serginio1
07.07.16
✎
18:15
|
Вот посмотри в картинках как нужно тестировать в VS
https://msdn.microsoft.com/ru-ru/library/bb386386.aspx |
|||
242
Serginio1
07.07.16
✎
18:17
|
(240) Да. Пока не нужна тебе ссылка на web службу. Но она и не мешает
|
|||
243
DES
07.07.16
✎
18:18
|
ну я же не должен ничего менять в коде C#
зачем мне тестировать не в 1С ? |
|||
244
Serginio1
07.07.16
✎
18:20
|
А там ты больше информации получишь. Подсказку через точку итд. У тебя проблема началась, что не видно было тип
InvoicesContentRequest=Врап.ПолучитьТипИзСборки(ПространствоИмен+"InvoicesContentRequest",ПутьКФайлу); Док=Врап.СоздатьОбъект(InvoicesContentRequest); Док.ActorRole=1; Сообщить(Док.ActorRole); |
|||
245
DES
07.07.16
✎
18:23
|
да я до этой инфо могу достучаться запросто.
Создаю тип и в отладчике смотрю структуру. Одни типы создаются, а другие - нет. (Причем они однотипные). Как мне поможет отладка не под 1с ? |
|||
246
Serginio1
07.07.16
✎
18:25
|
Под 1С есть косяки. Короче ты ради интереса попробуй и все сразу поймешь. А то рассказывать какая вкусная икра, человеку ни разу её не пробовавшему ооочень сложно
|
|||
247
Serginio1
07.07.16
✎
18:26
|
При этом у меня этот тип создался.
|
|||
248
Serginio1
07.07.16
✎
18:26
|
Значит все таки ты другую DLL использовал.
|
|||
249
DES
07.07.16
✎
18:30
|
твоя не взлетела, а можешь её в FW 4.5.1 сделать ?
|
|||
250
DES
07.07.16
✎
18:37
|
вот сделал минимальный код
ИмяФайлаСборки = "ServiceEfactura.dll"; ПространствоИмен = "ServiceEfactura.ServiceReference."; КаталогФайлаСборки = "%CommonProgramFiles%"; ПутьКФайлуСборки = ПолучитьКаталог(КаталогФайлаСборки) + "\NetObjectToIDispatch.1C\" + ИмяФайлаСборки; ФайлСборки = Новый Файл(ПутьКФайлуСборки); ПутьКФайлу = ФайлСборки.ПолноеИмя; врап = Новый COMОбъект("NetObjectToIDispatch45"); InvoicesContentRequest1 = врап.ПолучитьТипИзСборки(ПространствоИмен + "SeriaNumberRequest", ПутьКФайлу); InvoicesContentRequest2 = врап.ПолучитьТипИзСборки(ПространствоИмен + "InvoicesContentRequest", ПутьКФайлу); InvoicesContentRequest1 - создается InvoicesContentRequest2 - нет. как порыться в dll и узнать есть там такой тип ? |
|||
251
DES
07.07.16
✎
18:39
|
так есть же http://prntscr.com/bpzr50
|
|||
252
DES
07.07.16
✎
18:40
|
но этот тип не правильный. Один раз случайно он создался и я видел правильную структуру
дам должно быть номер и серия - это для получения печатной формы по номеру накладной. А этот тип (на картинке) левый какой то. |
|||
253
DES
07.07.16
✎
18:43
|
прошу суд (252) во внимание не принимать
|
|||
254
DES
07.07.16
✎
18:51
|
кстати врап.ВыводитьСообщениеОбОшибке = ложь
не работает - все равно выбрасывает окно с мессагой |
|||
255
DES
07.07.16
✎
20:51
|
сделал тестирование типов
ИмяФайлаСборки = "ServiceEfactura.dll"; ПространствоИмен = "ServiceEfactura.ServiceReference."; КаталогФайлаСборки = "%CommonProgramFiles%"; ПутьКФайлуСборки = ПолучитьКаталог(КаталогФайлаСборки) + "\NetObjectToIDispatch.1C\" + ИмяФайлаСборки; ФайлСборки = Новый Файл(ПутьКФайлуСборки); ПутьКФайлу = ФайлСборки.ПолноеИмя; врап = Новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке = 0; СписокТипов = Новый СписокЗначений(); СписокТипов.Очистить(); СписокТипов.Добавить("TaxpayersRequest"); СписокТипов.Добавить("BankAccountRequest"); СписокТипов.Добавить("SeriaNumberRequest"); СписокТипов.Добавить("InvoicesRequest"); СписокТипов.Добавить("SignRequest"); СписокТипов.Добавить("InvoicesContentRequest"); СписокТипов.Добавить("ActorBaseRequest"); СписокТипов.Добавить("RejectRequest"); СписокТипов.Добавить("AcceptedRequest"); СписокТипов.Добавить("CanceledRequest"); СписокТипов.Добавить("PostInvocesRequest"); СписокТипов.Добавить("SearchRequest"); СписокТипов.Добавить("LogsRequest"); СписокТипов.Добавить("string"); Для Каждого Стр Из СписокТипов Цикл ТестТипа(Стр.Значение, Врап, ПутьКФайлу); КонецЦикла; КонецПроцедуры Функция ТестТипа(НаименованиеТипа, Врап, ПутьКФайлу) ПространствоИмен = "ServiceEfactura.ServiceReference."; Request = Неопределено; Попытка Request = Врап.ПолучитьТипИзСборки(ПространствоИмен + НаименованиеТипа, ПутьКФайлу); Сообщить(НаименованиеТипа + " протестирован. " + Request); Исключение Сообщить(НаименованиеТипа + " сбой."); КонецПопытки; КонецФункции получил результат: TaxpayersRequest протестирован. COMОбъект BankAccountRequest сбой. SeriaNumberRequest протестирован. COMОбъект InvoicesRequest протестирован. COMОбъект SignRequest протестирован. COMОбъект InvoicesContentRequest сбой. ActorBaseRequest протестирован. COMОбъект RejectRequest протестирован. COMОбъект AcceptedRequest протестирован. COMОбъект CanceledRequest протестирован. COMОбъект PostInvocesRequest протестирован. COMОбъект SearchRequest протестирован. COMОбъект LogsRequest протестирован. COMОбъект string сбой. может такое быть из-за кода 1С8 ? |
|||
256
DES
07.07.16
✎
21:05
|
и
TaxpayersResponse протестирован. c69f27fc-bb7f-4db5-9689-a5b1e32c9d74 BankAccountResponse сбой. SeriaNumberResponse протестирован. c03e7bd1-cc5c-4cc8-8115-eda7b0cd7f39 QRCodesResponse протестирован. b4cf5db0-dbc3-4cf0-9df5-28dc848dbe69 InvoicesXmlResponse протестирован. a5914550-8132-47cd-94e6-2f6e8a0e9734 InvoicesXmlResponse протестирован. b2e75b03-7dad-4b7b-958a-770dd2ce1946 InvoiceContentResponse сбой. InvoicesResponse протестирован. ceff6b7a-9876-4fe5-8a8e-3c7ab3b57fd5 InvoicesResponse протестирован. 19cbb218-7a59-47fe-8a02-ee2ff47f2cf4 RejectedResponse протестирован. ca39bd45-6da0-4e8e-8374-5971fb5cc313 AcceptedResponse протестирован. 2a82ae02-6b49-473a-bef8-a8ce09c708e8 CanceledResponse протестирован. 0b342e41-7e52-4c76-8492-e612eea3268f PostInvocesResponse протестирован. 8a6b942f-4ff6-408d-adff-516cf228a7f4 InvoicesResponse протестирован. 2cecfbc5-f428-41de-b58a-14c9b179e2e8 LogsResponse протестирован. 0c9b5acf-64ae-4f15-8c09-f50328e1cbb6 BaseResponse протестирован. 17724b4f-6bf2-40d2-88c7-1cbe041b2104 |
|||
257
DES
07.07.16
✎
21:06
|
чего то 2 функции - ни входящие типы , ни исходящие - не создаются
|
|||
258
Serginio1
07.07.16
✎
21:58
|
(257) У меня 244 Все прекрасно создается
А VS создается? |
|||
259
Serginio1
07.07.16
✎
22:01
|
Поставь последнюю из 218
|
|||
260
DES
08.07.16
✎
07:05
|
(218) у меня послеlняя, кстати в них можно уже и версионность вести ;)
|
|||
261
Serginio1
08.07.16
✎
08:08
|
(260) Если последняя, тогда 244 у тебя должна работать с моей DLL
|
|||
262
Serginio1
08.07.16
✎
08:09
|
Хотя у меня 10 ка. Но таких проблем у меня никогда не было.
|
|||
263
Serginio1
08.07.16
✎
08:29
|
И проверить в VS ты не можешь?
|
|||
264
DES
08.07.16
✎
08:52
|
пересобрал сборку под FW 4.6.1
никаких различий, те же проблемы TaxpayersRequest протестирован. 19fc03b4-fd53-4dfe-908d-0bd9638c4ce9 BankAccountRequest сбой. SeriaNumberRequest протестирован. 5771c993-3569-43b0-9cc6-059d5abc6ba9 InvoicesRequest протестирован. 746098ee-493e-458d-89cb-7761d72cb0e4 SignRequest протестирован. 6498763e-ed63-454f-a621-a1adcd6384d5 InvoicesContentRequest сбой. ActorBaseRequest протестирован. 1dc66503-3bc8-4cda-847e-42061df0ceca RejectRequest протестирован. f0874496-ef4f-4e93-bf7d-568617dc40a5 AcceptedRequest протестирован. 97030ab6-4a01-47b3-afd6-d7aabf284e48 CanceledRequest протестирован. 514f0508-6e24-4a48-b3b3-0f3c149780fc PostInvocesRequest протестирован. 14f277ee-bc62-4d79-8e30-8fa844dafd6d SearchRequest протестирован. 331e5b7b-dfd7-4a02-80b4-c8ce3e8544d5 LogsRequest протестирован. dfda48ac-af4a-41ea-b4d7-08bd0366bfa3 string сбой. TaxpayersResponse протестирован. 70a84d3c-25ad-491c-bab9-a27df6b44303 BankAccountResponse сбой. SeriaNumberResponse протестирован. 6126a146-a50b-483c-afc0-afb4ee17d921 QRCodesResponse протестирован. 7a2b6b9a-3eef-400e-b0b6-a75798bb2487 InvoicesXmlResponse протестирован. 21ddb6a1-ddc2-44e4-a4a2-1c5b738aa6ae InvoicesXmlResponse протестирован. 4f89912c-5a54-424c-8ab9-607af69ae89e InvoiceContentResponse сбой. InvoicesResponse протестирован. 10419ac5-04f0-43ed-8d12-1c4de7340363 InvoicesResponse протестирован. 63d2b4ba-3fb7-4ad4-9b81-4e3740fdc5b7 RejectedResponse протестирован. ddad0252-9d7f-4368-90a7-458ae6651d9b AcceptedResponse протестирован. 1d810003-52c4-4f86-ab4e-751425488adb CanceledResponse протестирован. 68d8c572-234e-474f-8987-d9f55fb20cd0 PostInvocesResponse протестирован. 9f4f518f-338f-44a2-887a-e5cae82642b1 InvoicesResponse протестирован. 1dd9d9c7-9d1b-4264-8025-9437b9b4c6ce LogsResponse протестирован. 36775a9e-07ab-4240-bbe4-59a6ae9ee8c2 BaseResponse протестирован. c1cf4f25-0a88-45e7-806e-1da739be54d1 |
|||
265
Serginio1
08.07.16
✎
10:18
|
string На самом деле System.String
У меня врап=новый COMОбъект("NetObjectToIDispatch45"); врап.ВыводитьСообщениеОбОшибке=ложь; ПространствоИмен="efactura.ServiceReference1."; ПутьКФайлу="d:\Vs2015Programs\efactura\efactura\bin\Debug\efactura.dll"; СписокТипов = Новый СписокЗначений(); СписокТипов.Очистить(); СписокТипов.Добавить("TaxpayersRequest"); СписокТипов.Добавить("BankAccountRequest"); СписокТипов.Добавить("SeriaNumberRequest"); СписокТипов.Добавить("InvoicesRequest"); СписокТипов.Добавить("SignRequest"); СписокТипов.Добавить("InvoicesContentRequest"); СписокТипов.Добавить("ActorBaseRequest"); СписокТипов.Добавить("RejectRequest"); СписокТипов.Добавить("AcceptedRequest"); СписокТипов.Добавить("CanceledRequest"); СписокТипов.Добавить("PostInvocesRequest"); СписокТипов.Добавить("SearchRequest"); СписокТипов.Добавить("LogsRequest"); Для Каждого Стр Из СписокТипов Цикл попытка Тип=Врап.ПолучитьТипИзСборки(ПространствоИмен+Стр.Значение,ПутьКФайлу) исключение Сообщить("Ошибка получения типа "+Стр.Значение); сообщить(Врап.Встроку(Врап.ПоследняяОшибка)); конецпопытки; КонецЦикла; Все проходит. |
|||
266
Новиков
08.07.16
✎
10:31
|
Мда. Вот ипота-то сказочная.
Не вникая даже в суть творящегося, понаблюдаю за тем, в итоге ТС удовлетворится или нет. |
|||
267
Serginio1
08.07.16
✎
10:43
|
Отпаравил на почту DLL с которой у меня все работает NetObjetToIDispatch45.dll
Проверь путь загруженной сборки тип = врап.ПолучитьТип("NetObjectToIDispatch45.GlobalContext1C"); тип=Врап.ТипКакОбъект(тип); assem=тип.Assembly; Сообщить(assem.Location); |
|||
268
Serginio1
08.07.16
✎
10:44
|
(266) А ты вникни, а то не читал, но осуждаю
|
|||
269
Serginio1
08.07.16
✎
11:53
|
Если не получится вышли свою DLL
|
|||
270
DES
08.07.16
✎
12:24
|
С твой, из почты, DLL и на W2008r2 тесты прошли успешно.
|
|||
271
Serginio1
08.07.16
✎
12:34
|
(270) Вышли свою. Посмотрю
|
|||
272
Serginio1
08.07.16
✎
12:36
|
Вернее про какую DLL мы говорим? Я про ServiceEfactura.dll
|
|||
273
DES
08.07.16
✎
12:39
|
я про твое изобретение.
|
|||
274
DES
08.07.16
✎
12:40
|
щас переделываю тест на реале. ща поглядим
|
|||
275
Serginio1
08.07.16
✎
12:45
|
(273) Так в 218 должен быть аналог. Чуть позже добавлю более простое создание Genric типов и обновлю
|
|||
276
DES
08.07.16
✎
12:50
|
(275) ну все тики-так.
получаю PDF от сервиса. Кстати, есть какая-то простая печаталка PDF чтоб из-под 1с8 запускать ? |
|||
277
Serginio1
08.07.16
✎
13:04
|
Я так же буду в Интернете смотреть.
|
|||
278
Serginio1
08.07.16
✎
13:05
|
||||
279
Serginio1
08.07.16
✎
13:07
|
||||
280
oleg_km
08.07.16
✎
13:07
|
(266) Может сделать тоже православным 1Сным способом?
|
|||
281
Serginio1
08.07.16
✎
13:11
|
(280) Ну он не читает. Зачем это ему. Проблема была в старой компоненте NetObjetToIDispatch45.dll и поначалу в старых DLL для подключения к сервису.
|
|||
282
DES
08.07.16
✎
13:11
|
(279) т.е. добавить в мою сборку модуль печати PDF и вызывать его ?
|
|||
283
Новиков
08.07.16
✎
13:19
|
(281) >>Ну он не читает. Зачем это ему.
Конечно не читаю. Зачем мне это? |
|||
284
oleg_km
08.07.16
✎
13:19
|
(282) Там же вроде отдельная сборка.
|
|||
285
DES
08.07.16
✎
13:20
|
отдельная - не комильфо
|
|||
286
Serginio1
08.07.16
✎
13:25
|
(282) Нет там отдельные сборки Spire.Pdf.dll и Spire.License.dll
Не отдельно ты не найдешь |
|||
287
Serginio1
08.07.16
✎
14:07
|
Но можно Собрать проект Visual Studio в один файл с помощью ILMerge
https://habrahabr.ru/post/126089/ |
|||
288
Serginio1
08.07.16
✎
14:14
|
||||
289
DES
08.07.16
✎
14:17
|
ругаются на ILMerge.
А почему я не смогу дописать в классы свою функцию ? |
|||
290
Serginio1
08.07.16
✎
14:20
|
Сможешь только тебе придется добавить эти две библиотеки в проект
|
|||
291
Serginio1
08.07.16
✎
14:54
|
Или можешь использовать командную строку из 1С
http://rsdn.ru/forum/dotnet/6117010.all |
|||
292
Serginio1
08.07.16
✎
15:12
|
||||
293
DES
08.07.16
✎
17:14
|
Благодарствую.
|
|||
294
DES
10.07.16
✎
19:39
|
еще один проблемс, не создается BankAccountRequest
вроде бы однотипно описаны входящие переменные, но эта не создается, может глянешь у себя ? {ОбщийМодуль.EFactura.Модуль(75)}: Ошибка при вызове метода контекста (СоздатьОбъект) Request = Врап.СоздатьОбъект(ПространствоИмен + "BankAccountRequest"); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип ServiceEfactura.ServiceReference.BankAccountRequest |
|||
295
DES
10.07.16
✎
19:42
|
и так тоже
Возврат _Врап.СоздатьОбъект(_Врап.ПолучитьТип("ServiceEfactura.ServiceReference." + _ИмяОбъекта)); по причине: Произошла исключительная ситуация (NetObjetToIDispatch45): неверный тип ServiceEfactura.ServiceReference.BankAccountRequest |
|||
296
Serginio1
10.07.16
✎
20:45
|
(295) У меня тест в 265 прошел. А там и BankAccountRequest.
Смотри пространство имен. |
|||
297
DES
10.07.16
✎
20:55
|
не, разобрался.
обращается к сборке старой, ранее зареганой C:\Program Files\FilesNetObjectToIDispatch2\ServiceEfactura.dll а я указываю C:\Program Files\Common Files\NetObjectToIDispatch.1C\ServiceEfactura.dll Тип = Врап.ПолучитьТипИзСборки(ПространствоИмен + "BankAccountRequest", ФайлСборки.ПолноеИмя); |
|||
298
Serginio1
10.07.16
✎
21:07
|
А как ты ServiceEfactura.dll зарегистрировал?
Регистрировать нужно только NetObjetToIDispatch45.dll |
|||
299
DES
13.07.16
✎
23:19
|
а можно как то подключаться к серверу через прокси ?
(чтобы IP поменять) |
|||
300
Serginio1
14.07.16
✎
00:05
|
||||
301
Serginio1
14.07.16
✎
00:10
|
||||
302
Serginio1
14.07.16
✎
00:12
|
||||
303
DES
14.07.16
✎
01:17
|
какая то фигня получается.
если запрашиваю список накладных - получаю 1 раз, все нормально если запрашиваю повторно - 0 на выходе. хотя если запрашивать конкретную накладную, хоть 100 раз подряд - работает. |
|||
304
Serginio1
14.07.16
✎
07:48
|
Ты соединение закрываешь?
|
|||
305
DES
14.07.16
✎
08:43
|
ну вроде да, буфер сообщения сделал чуть больше 64к
Функция API_eFactura(_ИмяФункции, _ПараметрыФункции, _UserName="", _PassWord="") Экспорт // GetLogs from SIA E-Factura Перем Результат; Перем ФайлВрап, Assembly; Перем ПутьКФайлам, ИмяФайлаСборки, ПространствоИмен; Перем Результат1; Результат = Неопределено; ФайлВрап = "NetObjectToIDispatch45"; Попытка Врап = Новый COMОбъект(ФайлВрап); Врап.ВыводитьСообщениеОбОшибке = Ложь; Assembly = Врап.ТипКакОбъект(Врап.ПолучитьТип(ФайлВрап + ".GlobalContext1C")).Assembly; Исключение Assembly = Неопределено; КонецПопытки; Если НЕ Assembly=Неопределено Тогда ФайлВрап = Новый Файл(Assembly.Location); ПутьКФайлам = ФайлВрап.Путь; ИмяФайлаСборки = "ServiceEfactura.dll"; ПространствоИмен = "ServiceEfactura.ServiceReference."; ИмяФайлаСборки = ПутьКФайлам + ИмяФайлаСборки; ФайлСборки = Новый Файл(ИмяФайлаСборки); Сборка_API_eFactura = ФайлСборки.Существует(); Если Сборка_API_eFactura Тогда Попытка Сборка_API_eFactura = Врап.ПолучитьТипИзСборки(ПространствоИмен + "ServiceClient", ФайлСборки.ПолноеИмя); Исключение Сборка_API_eFactura = Неопределено; КонецПопытки; КонецЕсли; Если Сборка_API_eFactura=Неопределено Тогда // Сообщить("Сервис API eFactura недоступен. Инструкция https://efactura.fisc.md/Help/eFactura_Integration_Guide.pdf"); Возврат Неопределено; Иначе Если ТипЗнч(_ПараметрыФункции)=Тип("Структура") Тогда #Область СlientEFactura UserName = "DES"; PassWord = "MyPass"; Http = "Https"; BasicHttpBinding = Врап.ПолучитьТипИзСборки("System.ServiceModel.Basic" + Http + "Binding", "System.ServiceModel.dll"); Binding = Врап.СоздатьОбъект(BasicHttpBinding, Врап.ПолучитьТип("System.ServiceModel.Basic" + Http + "SecurityMode").TransportWithMessageCredential); Binding.MaxBufferSize = 2097151; Binding.MaxReceivedMessageSize = 2097151; Address = Врап.СоздатьОбъект("System.ServiceModel.EndpointAddress", "https://api-efactura.fisc.md"); Попытка СlientEFactura = Врап.СоздатьОбъект(ПространствоИмен + "ServiceClient", Binding, Address); СlientEFactura.ClientCredentials.UserName.UserName = ?(ПустаяСтрока(_UserName), UserName, _UserName); СlientEFactura.ClientCredentials.UserName.Password = ?(ПустаяСтрока(_Password), PassWord, _Password); Исключение EFactura.ОбработкаОшибкиСlientEFactura(СlientEFactura.ПоследняяОшибка); СlientEFactura = Неопределено; КонецПопытки; #КонецОбласти Если НЕ СlientEFactura=Неопределено Тогда Если _ИмяФункции="Test" Тогда #Область Test Request = "TEST"; Попытка Ответ = СlientEFactura.Test(Request); Исключение Ответ = Неопределено; КонецПопытки; Если Ответ=Неопределено Тогда Результат = Неопределено; Иначе Результат = Новый Структура("RequestId,Status,TimeStamp", Ответ.RequestId, Ответ.Status, Ответ.TimeStamp); КонецЕсли; #КонецОбласти КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Врап.ЗакрытьРесурс(СlientEFactura); КонецЕсли; Возврат Результат; КонецФункции |
|||
306
Serginio1
14.07.16
✎
10:11
|
Наворотил.
Нет у СlientEFactura свойства ПоследняяОшибка; Есть Врап.ПоследняяОшибка . Я уже писал тебе. |
|||
307
DES
14.07.16
✎
10:36
|
ну, ладно, а я закрываю соединение как нужно ?
|
|||
308
Serginio1
14.07.16
✎
10:48
|
Да можно СlientEFactura.Close()
Но Врап.ЗакрытьРесурс(СlientEFactura); универсален Применяя ПолучитьТипИзСборки ты получешь не сборку а тип. ServiceClient= Врап.ПолучитьТипИзСборки(ПространствоИмен + "ServiceClient", ФайлСборки.ПолноеИмя); Который можешь использовать для создания объекта СlientEFactura = Врап.СоздатьОбъект(ServiceClient, Binding, Address); |
|||
309
DES
14.07.16
✎
11:05
|
но так
СlientEFactura = Врап.СоздатьОбъект(ПространствоИмен + "ServiceClient", Binding, Address); тоже срабатывает ? |
|||
310
Serginio1
14.07.16
✎
11:08
|
(309) Срабатывает так как ты уже сборку подгрузил,
Но вариант с СlientEFactura = Врап.СоздатьОбъект(ServiceClient, Binding, Address); Просто быстрее и лаконичнее. |
|||
311
DES
14.07.16
✎
12:05
|
вот в их логах нашел нашел
Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property. что бы это значило ? |
|||
312
Serginio1
14.07.16
✎
12:19
|
https://msdn.microsoft.com/ru-ru/library/system.web.script.serialization.javascriptserializer.maxjsonlength(v=vs.110).aspx
Это скорее всего связано с Задай им по максимуму maxReceivedMessageSize=2147483647; Binding.MaxBufferSize = maxReceivedMessageSize; Binding.MaxReceivedMessageSize = maxReceivedMessageSize; |
|||
313
DES
14.07.16
✎
12:27
|
какая то фигня, чтобы снять данные по сегодняшним ТТН нужно получить их список и по списку (но серии и номеру) дергать содержимое.
но если один раз получил список, то тут же получить еще раз не получается - возвращает список с 0 кол-вом строк. Т.е. следить на новыми ТТН в течении дня не получится. |
|||
314
Serginio1
14.07.16
✎
12:30
|
Ну это в службу поддержки.
|
|||
315
DES
14.07.16
✎
12:44
|
maxReceivedMessageSize=2147483647;
откуда такая цифра ? |
|||
316
DES
14.07.16
✎
14:15
|
начал гонять получение лога
интересная деталь. при некоторых значениях даты и времени выдает пусто например с 14.07.2016 00:00:00 по 14.07.2016 23:59:59 - глючит, а с 14.07.2016 090:00:00 по 14.07.2016 13:30:59 - выдает нормальный лог. может быть дата+время не так передается ? |
|||
317
Serginio1
14.07.16
✎
14:20
|
Фиддлером посмотри.
А это что такое 090:00:00? |
|||
318
Serginio1
14.07.16
✎
14:21
|
Задай вопрос в службу поддержки.
|
|||
319
DES
14.07.16
✎
14:29
|
09:00:00
|
|||
320
DES
14.07.16
✎
14:30
|
ОНО возвращает время так /Date(-62135596800000)/
|
|||
321
Serginio1
14.07.16
✎
14:33
|
В формате JSON. Пиши в службу поддержки
|
|||
322
Serginio1
14.07.16
✎
14:33
|
А ты JSON формируешь?
|
|||
323
Serginio1
14.07.16
✎
14:38
|
Это возвращает тебе в JSON формате. Смотри фиддлером что отправляет
|
|||
324
DES
14.07.16
✎
15:19
|
не, JSON не нужно, у них описаны входные структуры.
вот щас на 14.07.2016 12:09:31 - дает лог а на 14.07.2016 12:09:30 - фиг |
|||
325
DES
14.07.16
✎
15:21
|
такого понятия как служба поддержки у них нет.
я все обзвонил, никто не слышал про API вообще. |
|||
326
Serginio1
14.07.16
✎
15:28
|
Возьми в руки фиддлер и посмотри запрос. Можешь отослать им письмо.
Я без понятия, что и где там у них |
|||
327
DES
14.07.16
✎
22:37
|
у меня такое впечатление, что все связанное с датой - глючит.
я намекаю, что может быть формат даты не соответствует или ломается при передаче через твою примочку?. |
|||
328
Serginio1
14.07.16
✎
22:41
|
Возьми в руки фиддлер
|
|||
329
DES
14.07.16
✎
22:42
|
да там ногу сломишь
|
|||
330
DES
14.07.16
✎
22:52
|
пишет
This is a CONNECT tunnel, through which encrypted HTTPS traffic flows. To view the encrypted sessions inside this tunnel, enable the Tools > Fiddler Options > HTTPS > Decrypt HTTPS traffic option. A SSLv3-compatible ServerHello handshake was found. Fiddler extracted the parameters below. Version: 3.1 (TLS/1.0) SessionID: -skipid- Cipher: TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA [0xC014] CompressionSuite: NO_COMPRESSION [0x00] Extensions: server_name empty renegotiation_info 00 ec_point_formats uncompressed [0x0], ansiX962_compressed_prime [0x1], ansiX962_compressed_char2 [0x2] |
|||
331
tndr
14.07.16
✎
23:02
|
Народ подскажите плиз, как правильно быть в такой ситуации:
Есть несколько версий платформ серверов приложений 8.1, 8.2, и 8.3.5 и 8.3.7 Надо иметь возможность из С# иметь возможность подключаться ко всем 4-м агентам сервера, именно к ним, не к базам, а к самой службе. Нужно это для того чтобы с помощью 8VComConnector-а получать список баз который крутится на каждом из РАгентов. Проблема в том, что для каждой платформы используется свой комконнектор, и свое пространство имен V81,V82,V83 при подключенной к проекту компоненте. Надо сделать так чтобы когда пользователь выбирает платформу, то иницировалось подключение к нужному серверу приложений (это по порту и не сложно), и основное - это понять какой класс комконнектора надо подключать с каким пространством имен. Код примерно такой: V83.COMConnector com1s = new V83.COMConnector(); V83.IServerAgentConnection agent = com1s.ConnectAgent(server); Array clasters = agent.GetClusters(); foreach(V83.IClusterInfo clasterInfo in clasters) ...... И надо чтобы в зависимости от того, какая версия платформы выбрана, V82 менялось на V81 или на V83. Или может какой-то другой подход должен быть? И еще хотел узнать, если например я подключаю к проекту компоненту из релиза 8.2.19.83 на локальном компе, а на сервере есть и этот и допустим 8.2.19.130, V83.IServerAgentConnection agent = com1s.ConnectAgent(server); работать же не будет? |
|||
332
Serginio1
14.07.16
✎
23:02
|
||||
333
DES
14.07.16
✎
23:04
|
вроде как нормально дату лепит, только без Z
система пишет типа 2016-07-14T20:05:11.249Z а мои параметры 2016-07-14T20:05:11 |
|||
334
Serginio1
14.07.16
✎
23:06
|
(331) Для 8.3 не получится
v8: v8: Использование сборок .NET в 1С 7.x и 8.x core83.dll использует текущего процесса |
|||
335
DES
14.07.16
✎
23:57
|
влепил запрос без дат (там можно пустые) - получил все ТТН за все время.
Что-то с датами не то. |
|||
336
Serginio1
15.07.16
✎
00:00
|
Без стороны сервера ты этого не поймешь
|
|||
337
Serginio1
15.07.16
✎
00:01
|
334+ Вернее для каждой 8.X нужен отдельный процесс.
|
|||
338
DES
18.07.16
✎
11:50
|
а как System.ServiceModel.BasicHttpBinding.TextEncoding переделать на windows-1250?
а то передает символы и исправляет в kou-8 |
|||
339
Serginio1
18.07.16
✎
12:01
|
Нет по умолчанию UTF8Encoding.
https://msdn.microsoft.com/ru-ru/library/system.servicemodel.basichttpbinding.textencoding(v=vs.100).aspx Binding.TextEncoding Врап.ПолучитьТип("System.Text.Encoding").GetEncoding(1250); |
|||
340
Serginio1
18.07.16
✎
12:03
|
Просто раз ты кирилицу передаешь, то 1250 тебе точно не подойдет. А у них по умолчанию только значит 1250. Следи затем, что бы кириллицу не передавать
Про GetEncoding https://msdn.microsoft.com/ru-ru/library/wzsz3bk3(v=vs.110).aspx |
|||
341
Serginio1
18.07.16
✎
12:30
|
Или если ы используешь строки то при получении строкового представления используй CultureInfo.InvariantCulture
http://catalog.mista.ru/public/448668/ CultureInfo=Врап.ПолучитьТип("System.Globalization.CultureInfo"); SB.AppendFormat(CultureInfo.InvariantCulture,"{0} {1} {2} {3}",Целое,Дробное,Строка,Дата,0); Сообщить(SB.ToString()); Получаем 55333 66333.44 абвгд 01/26/2016 17:10:05 |
|||
342
Serginio1
18.07.16
✎
12:38
|
Или в 1С используй XMLСтрока
|
|||
343
DES
20.07.16
✎
12:29
|
А еще.
Получаю файл на сервере и сохраняю его под пользователем сервера USR1CV8, в его КаталогВременныхФайлов() file.WriteAllBytes(Результат, Ответ.Result.Content); Но Клиенты же могут не иметь доступа в темпу USR1CV8, как перекинуть файл из темпа сервера в темп клиента? ИЛИ вернуть с сервера не файл, а COMSafaArrray и уже на клиенте создавать файл? ( COMSafaArrray - содержит PDF) |
|||
344
Serginio1
20.07.16
✎
12:42
|
Я тебе уже писал
Convert=Врап.ПолучитьТип("System.Convert"); ДД=Base64Значение(Convert.ToBase64String(Ответ.Result.Content)) |
|||
345
Serginio1
20.07.16
✎
12:44
|
А Двоичные Данные возвращай на клиента
|
|||
346
DES
20.07.16
✎
13:20
|
т.е. ДД - это двоичные данные?
|
|||
347
Serginio1
20.07.16
✎
14:11
|
Глобальный контекст (Global context)
Base64Значение (Base64Value) Синтаксис: Base64Значение(<Строка>) Параметры: <Строка> (обязательный) Тип: Строка. Строка, закодированная по алгоритму base64. Возвращаемое значение: Тип: ДвоичныеДанные. Описание: Получает из строки закодированной по алгоритму base64 двоичные данные. |
|||
348
DES
11.08.16
✎
17:12
|
можно ли 1с8.ехе заставить понимать файл 1с8.ехе.config при
Прокси = WSСсылки.eFactura.СоздатьWSПрокси(targetNamespace, name, Binding,,,Новый ЗащищенноеСоединениеOpenSSL(),,Истина); WSПараметр.message = "TEST"; Прокси.Пользователь = "DES"; Прокси.Прокси.Пользователь = Прокси.Пользователь; Прокси.Пароль = "MyPass"; Прокси.Прокси.Пароль = Прокси.Пароль; Результат = Прокси.Test(WSПараметр); // тут чтобы понимала что я хочу TransportWithMessageCredential //<binding name="BasicHttpBinding_IService"> //<security mode="TransportWithMessageCredential" /> |
|||
349
Serginio1
11.08.16
✎
17:39
|
Ты не сюда пиши, а в 1С. А нам сообщи
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |