Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
J-ИРБИС :  ИРБИС Irbis
 
Запрос c# через протокол JSON-RPC 2.0 API
Пользователь: KazATU (IP-адрес скрыт)
Дата: 02, January, 2024 23:10

Привет всем,

Хотели реализовать запросы из С#:
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace jsonRpcExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var request = new
            {
                jsonrpc = "2.0",
                method = "rpc_auth",
                @params = new { login = "user", password = "passs" },
                id = 1
            };

            var client = new HttpClient();
            var content = new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json");
            var response = await client.PostAsync("https://ecatalog.kazatu.kz/jirbis2/components/com_irbis/ajax_provider.php?task=rpc&class=jwrapper", content);
            var responseString = await response.Content.ReadAsStringAsync();

            Console.WriteLine(responseString);
        }
    }
}

Ответ:
{"jsonrpc":"2.0","result":true,"id":1}

а теперь как это еще добавить или заменить запрос на req_full_count('IBIS', '<.>V=$<.>');
var request2 = new
            {
                jsonrpc = "2.0",
                method = "req_full_count",
                @params = new { base = "IBIS", req = "<.>V=$<.>" },
                id = 3
            };
то ответ:
{"jsonrpc":"2.0","error":{"code":-32602,"message":"\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435
\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","data":"database not
found"},"id":3}
у кого есть опыт поскажите? Почему database not found



Редактировано 2 раз. Последний раз 04.01.2024 09:41 пользователем KazATU.

Re: Запрос c# через протокол JSON-RPC 2.0 API
Пользователь: KazATU (IP-адрес скрыт)
Дата: 04, January, 2024 13:27

Оказывается параметры надо было оправить как список:

var request2 = new 
{
    jsonrpc = "2.0",
    method = "req_full_count",
    @params = new List<string> { "IBIS","<.>V=$<.>" },
    id = 2
};

List<Object> list = new List<Object>();
list.Add(request);
list.Add(request2);
var client = new HttpClient();
var content = new StringContent(JsonSerializer.Serialize(list), Encoding.UTF8, "application/json");

Re: Запрос c# через протокол JSON-RPC 2.0 API
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 14, January, 2024 10:57

JSON-RPC 2.0 -- это стандартный протокол обмена данными. Чтобы работать по нему целесообразно использовать стандартные библиотеки. Делать их с нуля -- всё равно, что через сокеты работать по HTTP.

Вот рекомендации искусственного интеллекта относительно библиотек для C#:

Цитата:
ИИ
StreamJsonRpc1: Эта библиотека от Microsoft предлагает JSON-RPC 2.0 через любой .NET Stream, WebSocket или Pipe. Она также поддерживает отмену запросов, генерацию прокси-клиентов и многое другое1.
JsonRpcClient2: Эта библиотека предоставляет классы для создания клиентов JSON RPC 2.0 в C#. По умолчанию она поддерживает HTTP с помощью RpcHttpClient и WebSockets с помощью RpcWsClient2.

HttpJsonRpcNet3: Эта кросс-платформенная библиотека .NET Standard реализует спецификацию JSON-RPC 2.0, а также потоковую передачу данных (вверх и вниз) поверх HTTP3.

Re: Запрос c# через протокол JSON-RPC 2.0 API
Пользователь: KazATU (IP-адрес скрыт)
Дата: 14, January, 2024 22:19

Да, разобрались протоколом JSON-RPC2, теперь пытаемся создать/изменить читателя, в функции update_user_rec() в классе ji_user_rec_update нашли метод RecWrite.

[
    
    {
        "jsonrpc": "2.0",
        "method": "rpc_auth",
        "params": {
            "login": "admin",
            "password": "parol"
        },
        "id": 2
    },
    {
        "jsonrpc": "2.0",
        "method": "RecWrite",
        "params": ["RDR", true,"651#0 0#18 920#RDRU 10#testov 11#Сабыр 12#Жандос&#1201;лы 30#testov 23#м 50#студент 51#15.12.2015^CАБИП 22#228Д 31#^A20151215^BАСС 90#^02015/2016^F1^Oд/о^Vбкл^AВиТЖ ^C5В080300 907#^A20151215^Bmariavd 907#^A20151215^Bolzhas 907#^A20151215^B 907#^A20160222^B 907#^A20160226^B 907#^A20160404^B 907#^A20160511^B 907#^A20160921^B 907#^A20161102^Bolzhas 907#^A20161109^Bolzhas 907#^A20161116^Bmariavd 907#^A20161130^Bmariavd 907#^A20230614^Bolzhasmo 907#^A20230804^Bolzhasmo 907#^A20231106^Bolzhasmo 907#^A20240102^Badmin 907#^A20240105^Badmin 24#1000000100969 40#^AЦ69я73/Г12-388522^Bб/у-рег.№5607^KУА^VУА^D20151215^1114954^E20160104^GEK^H304DB75F1960000A00103CC9^IBatima^F20151213^2012444 40#^A636.082/С76-583400^Bб/у-рег.№ 3023^KУА^VУА^D20160222^1160747^E20160313^GEK^H304DB75F1960000A08F99EEA^Imariavd^F20160511^2154815 40#^A636.082.12(076.5)/і-51-183794^Bб/у-рег.№5767^KУА^VУА^D20160226^1082305^E20160317^GEK^H304DB75F1960000A08F692E6^Imariavd^F20160511^2154759 40#^A577(075.8)/С31-492090^Bбу-рег.№2615^KУА^V*^D20160404^1150725^E20160424^GEK^H304DB75F1960000A08F72294^Imariavd^F20160511^2154750 40#^A636:612(075.8)/Н 50-471396^Bб/у-рег.№5442^KУА^VУА^D20160921^1165613^E20161011^GEK^H304DB75F1960000A08F73B07^Imariavd^F20200821^2121821 40#^A636:612/Н50-172508^E20161123^F20161102^GEK^H304DB75F1960000A08F72D26^D20161102^CЖануарлар физиологиясы; О&#1179;улы&#1179;^V*^I1^Bб/у-рег.№3416^B 40#^F20200821^D20200821^C02 - Обходной лист (Посещение)^V*^1124813^2124813^Imariavd 130#123As 21#2000 17#44444 32#forsajastana2@gmail.com 101#BG 13#^BБолгария^CАлматы^DОмарова^E134^H3 52#20231106^CЗОО"],
        "id": 3
    }
]

выдает
[{"jsonrpc":"2.0","result":true,"id":2},{"jsonrpc":"2.0","error":{"code":-32601,"message":"Метод не найден","data":null},"id":3}]

Вопрос какой метод используется создания/изменения/удаления читателя?

Научная библиотека Казахского агротехнического университета им. С. Сейфуллина

Re: Запрос c# через протокол JSON-RPC 2.0 API
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 14, January, 2024 23:12

KazATU написал(а):
-------------------------------------------------------
> Да, разобрались протоколом JSON-RPC2, теперь
> пытаемся создать/изменить читателя, в функции
> update_user_rec() в классе ji_user_rec_update
> нашли метод RecWrite.

Надеюсь, что необходимость в этом, в связи с наличием специализированного режима, у Вас отпадёт.

Функции RecWrite в ВНЕШНЕМ API нет. Если бы она была, это было бы крайне небезопасно.



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.