powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / HTTPS over T-SQL
25 сообщений из 35, страница 1 из 2
HTTPS over T-SQL
    #39630935
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, привет. подскажите пожалуйста, как обращаться к ресурсам HTTPS через T-SQL
Пример кода

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
DECLARE @win   INT
DECLARE @hr   INT
DECLARE @text   VARCHAR (MAX)
DECLARE @str   VARCHAR (100)
DECLARE @Result   NVARCHAR (MAX)
DECLARE @result   TABLE (result VARCHAR (MAX))
  
    EXEC @hr=sp_OACreate 'MSXML2.ServerXMLHttp',@win OUT 
    IF @hr <> 0 BEGIN 
		EXEC sp_OAGetErrorInfo @win
		select 2
	END

    EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET', 'https://api.direct.yandex.com','false'
    IF @hr <> 0 BEGIN 
		EXEC sp_OAGetErrorInfo @win
		select 3 
	END 
  

    EXEC @hr=sp_OAMethod @win,'Send', null
	IF @hr <> 0 BEGIN 
		EXEC sp_OAGetErrorInfo @win
	END 


	SELECT @Result = result FROM @result



выдает ответ
A certificate is required to complete client authentication
Хотя сертификат установлен, открываю на хосте с БД explorer и перехожу по ссылке - все ок.
Так же пытался сделать через WinHttp.WinHttpRequest.5.1, одинаковый результат

В MS SQL какое то свое хранилище сертификатов?
Прошу помочь

Заранее благодарен.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39630941
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поиск рулит
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39630969
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема именно в том, что с этим сайтом код не работает
https://api.direct.yandex.com

А если взять например какой нибудет https://habrahabr.ru/ или даже https://ya.ru - все ок

Что то странное
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39630976
Фотография hollister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте у себя рабочий пример

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
declare @obj int, @ret  int, @text varchar(max), @url varchar(max)

select @url = 'https://api.direct.yandex.ru/'

exec @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @obj out
IF @ret <> 0 exec sp_OAGetErrorInfo @obj

exec @ret = sp_OAMethod @obj, 'Open', null, 'GET', @url, 'false'
if @ret <> 0 exec sp_OAGetErrorInfo @obj


exec @ret = sp_OAMethod @obj, 'setOption', null, 2 ,13056  -- игнорировать сертификат
if @ret <> 0 exec sp_OAGetErrorInfo @obj

EXEC @ret = sp_OAMethod @obj, 'SEND'
if @ret <> 0 exec sp_OAGetErrorInfo @obj

EXEC @ret = sp_OAGetProperty @obj, 'responsetext'
if @ret <> 0 exec sp_OAGetErrorInfo @obj
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39631054
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hollister,

С# еще не освоили?
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39631470
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовhollister,

С# еще не освоили?

а смысл?
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #39631777
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

очень простой - закрыть "черный ход" в виде OLE автоматизации.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
HTTPS over T-SQL
    #40029754
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то не смог победить подключение к веб-сервису

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
declare @username varchar (200) = 'USER'
declare @password varchar (200) = 'PASS'
declare @obj int
declare @sUrl varchar (200)
declare @response varchar (8000)
declare @hr int
declare @status INT
declare @statusText VARCHAR (200)
declare @source varbinary (max)
declare @auth varchar (max)

SET @source = CONVERT (varbinary (max), @username + ':' + @password) 

set @sUrl = 'https://mycompany.ru/my_soap/?wsdl'

SET @auth = 'BASIC ' + @username + ':' + @password
exec @hr = sp_OACreate 'MSXML2.ServerXMLhttp', @obj out
exec  @hr = sp_OAMethod @obj, 'setRequestHeader', null, 'Authorization', @auth
exec sp_OAMethod @obj, 'setRequestHeader', null, 'Accept', 'application/json'
exec @hr = sp_OAMethod @obj, 'Open', null, 'POST', @sUrl, false

exec sp_OAMethod @obj, 'send', null, @auth
exec sp_OAgetproperty @obj, 'responseText', @response out
exec sp_OAgetproperty @obj, 'status', @status out
exec sp_OAgetproperty @obj, 'StatusText', @statusText out
exec sp_OADestroy @obj
 
select @status [StatusCode], @statusText [StatusText], @response [Respuesta]



Но пишет, что не смог авторизоваться:

StatusCode - 401
StatusText - Unauthorized
Respuesta - NULL

Подскажите, пожалуйста

Через браузер с сервера по RDP запрашивает логин и пароль, после чего показывает XML сервиса

Как понять, почему не авторизовывается ?
Спасибо
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40029858
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

так не делают, для взаимодействия с сервисами пишут отдельное приложение-контроллер или, в крайнем случае, CLR функцию.
Это классическая MVC модель.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030010
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
после чего показывает XML сервиса

Это WSDL сервиса. Если бы авторизация на сервисе прошла нормально, то следующим шагом была бы ручная сборка SOAP-разметки для вызова методов, описанных в WSDL, причем для каждого метода разметка своя. А потом получение ответного SOAP, и его разбор. А та же visual studio умеет по WSDL создавать типизированные обёртки для обращения к сервису, и весь хардкор с ручной сборкой и разбором SOAP-пакетов становится не нужным.
Двоичник
Как понять, почему не авторизовывается ?

Ну, например, потому, что при basic-авторизации authorization header формируется в виде строки Basic+кодированный в base64 результат конкатенации (через дветочие с пробелом) имени пользователя и пароля. А здесь перевода результата конкатенации в base64 я нигде не наблюдаю.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030012
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Двоичник
после чего показывает XML сервиса

А та же visual studio умеет по WSDL создавать типизированные обёртки для обращения к сервису, и весь хардкор с ручной сборкой и разбором SOAP-пакетов становится не нужным.


Уморил.
"Написать письмо" сервису раз в сто проще банальным replace-ом по шаблону.
Ну а "разбор SOAP-пакетов" делает либо sqlXmlBulkLoader, либо сам сервер.

Все эти обертки - великое тормозящее зло.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030024
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
"Написать письмо" сервису раз в сто проще банальным replace-ом по шаблону.

Проще чем просто вызвать метод класса с нужными параметрами? Уморил.

aleks222
Все эти обертки - великое тормозящее зло.

Их тормозами можно пренебречь ввиду несоизмеримости задержек самих обёрток, и временем обращения собственно к сервису. В чем состоит остальное "зло"?
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030051
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока вы спорили о прекрасном, мне все же удалось авторизоваться на веб-сервисе. Хотя это вероятно и не правильно, в части шифрованной авторизации, но, так как это будет работать строго в Entranet, то этого достаточно

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
declare @postData varchar(255) = 'PostedString'
declare @Object as Int
declare @statusText varchar(255)
declare @status varchar(255)
declare @url varchar(255) = 'https://mycompany.ru/my_soap/?wsdl'
declare @user varchar(64) = 'USER'
declare @pass varchar(64) = 'PASS'
declare @t table (http ntext)

Exec sp_OACreate 'MSXML2.ServerXMLHTTP.3.0', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'post', @url, 'false', @user, @pass;
EXEC sp_OAMethod @Object, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded; charset=utf-8';
Exec sp_OAMethod @Object, 'send', NULL, @postData;
EXEC sp_OAGetProperty  @Object, 'status', @status OUT
EXEC sp_OAGetProperty  @Object, 'statustext', @statusText OUT
 
insert into @t
Exec sp_OAMethod @Object, 'responseText';

select http, datalength(http) from @t
 
Exec sp_OADestroy @Object;
  
select @status, @statusText



Единственно только я не понял, как отправить посылку @postData

Код: sql
1.
Exec sp_OAMethod @Object, 'send', NULL, @postData;



Основная беда вся в том, что я делаю взаимодействие с вебсервисом впервые в жизни. А вебсервис пишет другой программист. И как оно это всё устроено, для меня пока темное.

Однако в
Код: sql
1.
select http, datalength(http) from @t


Я весьма получаю XML как при обращении по ссылке на сервис браузером.

Внутри XML для меня якобы заготовлена ветка (фрагмент):

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   <operation name="TEST">
      <soap12bind:operation style="document" soapAction="http://mycompany.ru/my_soap#my_soap:TEST" />
      <input>
        <soap12bind:body use="literal" />
      </input>
      <output>
        <soap12bind:body use="literal" />
      </output>
    </operation>
  </binding>
  <service name="my_soap">
    <port name="my_soapSoap" binding="tns:my_soapSoapBinding">
      <documentation>
        <wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1" />
      </documentation>
      <soapbind:address location="https://mycompany.ru/my_soap" />
    </port>
    <port name="my_soapSoap12" binding="tns:my_soapSoap12Binding">
      <soap12bind:address location="https://mycompany.ru/my_soap/" />
    </port>
  </service>



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

Спасибо за помощь.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030067
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
... то следующим шагом была бы ручная сборка SOAP-разметки для вызова методов, описанных в WSDL, причем для каждого метода разметка своя. А потом получение ответного SOAP, и его разбор. ...

Очевидно я тут застрял. Но как сдвинуться дальше, пока не имею представления.
Фактически, программирую с чужих примеров и приемов
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030071
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

бросайте эти игры с OLE и пишите UNSAFE функцию на C#. Но это будет иметь последствия в удобстве сопровождения приложения и менее строгом уровне безопасности базы данных. Лучшее решение - написать отдельный "слой"-контроллер для взаимодействия с веб-сервисом.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030095
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Навыков на C# практически нет. На Delphi малость могу... Но это обещает породить зоопарк в стэке
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030242
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
[Их тормозами можно пренебречь ввиду несоизмеримости задержек самих обёрток, и временем обращения собственно к сервису. В чем состоит остальное "зло"?


Все банально.
Говнокод, который пишут вокруг обертки требует изрядных затрат времени на написание.
Не говоря уж о нервах.
Когда с этим чудом сталкиваешься, внезапно.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030250
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
Владислав Колосов,

Навыков на C# практически нет. На Delphi малость могу... Но это обещает породить зоопарк в стэке


Вот эта хрень на powershell выполняет запрос к SOAP и пишет ответ в файл
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
function Execute-SOAPRequest-ToFile 
( 
        [String] $URL,
        [String] $Action,
        [Xml]    $SOAPRequest,
        [String] $File,
        [int]    $Timeout = 60000

) 
{ 
        $soapWebRequest = [System.Net.WebRequest]::Create($URL)
        $soapWebRequest.Timeout = $Timeout
        $soapWebRequest.Headers.Add("SOAPAction" , $Action ) 

        $soapWebRequest.ContentType = 'text/xml;charset=utf-8' 
        $soapWebRequest.Accept      = $soapWebRequest.ContentType 
        $soapWebRequest.Method      = 'POST' 
        
        $requestStream = $soapWebRequest.GetRequestStream() 
        $SOAPRequest.Save($requestStream) 
        $requestStream.Close() 
        
        $responseStream = $soapWebRequest.GetResponse().GetResponseStream() 
        
        $fileStream =  new-object System.IO.FileStream( $File, [System.IO.FileMode]::Create, [System.IO.FileAccess]::Write )
        $responseStream.CopyTo($fileStream)
        $responseStream.Close()
        $fileStream.Close()

        return $true 
} 



А вот так, выглядят данные которые она обрабатывает

автор$URL
http://ksb3.zzzzz.ru/webservice/ewebsvc.dll/soap/IewsServer

$Action
urn:webservice-electrasoft-ru:types-ewsServerIntf-IewsServer#Login

$SOAPRequest
<?xml version="1.0" encoding="utf-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV=" http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC=" http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs=" http://www.w3.org/2001/XMLSchema" xmlns:ns2="urn:webservice-electrasoft-ru:types-ewsServerIntf" xmlns:ns1=" http://www.borland.com/namespaces/Types">
<SOAP-ENV:Body>
<m:Login xmlns:m="urn:webservice-electrasoft-ru:types-ewsServerIntf-IewsServer" SOAP-ENV:encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/">
<ConnectionID xsi:type="xs:string"></ConnectionID>
<UserAlias xsi:type="xs:string">Segddatrjgav</UserAlias>
<Password xsi:type="xs:string">fakfjakj123</Password>
<Language xsi:type="xs:string">RU</Language>
<ProfileID xsi:type="xs:string"></ProfileID>
<ContextXML xsi:type="xs:string"></ContextXML>
<Timeout xsi:type="xs:unsignedInt">1800000</Timeout>
</m:Login>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Данные просто генерируются сервером. Голым Т-SQL.

ЗЫ. Есть такая БЕСПЛАТНАЯ шняга "Fiddler" - он перехватывает и показывает веб-запроcы/ответы любой (ну почти) программы.
Можно посмотреть и сравнить, если есть работающий пример.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030252
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
написал CLR, скопипастил с интернета статейную

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Collections;
using System.Globalization;

// For the SQL Server integration
using Microsoft.SqlServer.Server;

// Other things we need for WebRequest
using System.Net;
using System.Text;
using System.IO;

    public partial class Functions
    {

    // Function to return a web URL as a string value.
    [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
    public static SqlString GET(SqlString uri, SqlString username, SqlString passwd)
    {
        // The SqlPipe is how we send data back to the caller
        SqlPipe pipe = SqlContext.Pipe;
        SqlString document;

        // Set up the request, including authentication
        WebRequest req = WebRequest.Create(Convert.ToString(uri));
        if (Convert.ToString(username) != null & Convert.ToString(username) != "")
        {
            req.Credentials = new NetworkCredential(
                Convert.ToString(username),
                Convert.ToString(passwd));
        }
        ((HttpWebRequest)req).UserAgent = "CLR web client on SQL Server";

        // Fire off the request and retrieve the response.
        // We'll put the response in the string variable "document".
        WebResponse resp = req.GetResponse();
        Stream dataStream = resp.GetResponseStream();
        StreamReader rdr = new StreamReader(dataStream);
        document = (SqlString)rdr.ReadToEnd();

        // Close up everything...
        rdr.Close();
        dataStream.Close();
        resp.Close();

        // .. and return the output to the caller.
        return (document);
    }


    // Function to submit a HTTP POST and return the resulting output.
    [Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
        public static SqlString POST(SqlString uri, SqlString postData, SqlString username, SqlString passwd)
        {
            SqlPipe pipe = SqlContext.Pipe;
            SqlString document;
            byte[] postByteArray = Encoding.UTF8.GetBytes(Convert.ToString(postData));

            // Set up the request, including authentication, 
            // method=POST and encoding:
            WebRequest req = WebRequest.Create(Convert.ToString(uri));
            ((HttpWebRequest)req).UserAgent = "CLR web client on SQL Server";
            if (Convert.ToString(username) != null & Convert.ToString(username) != "")
            {
                req.Credentials = new NetworkCredential(
                    Convert.ToString(username),
                    Convert.ToString(passwd));
            }
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded; charset=utf-8";

            // Submit the POST data
            Stream dataStream = req.GetRequestStream();
            dataStream.Write(postByteArray, 0, postByteArray.Length);
            dataStream.Close();

            // Collect the response, put it in the string variable "document"
            WebResponse resp = req.GetResponse();
            dataStream = resp.GetResponseStream();
            StreamReader rdr = new StreamReader(dataStream);
            document = (SqlString)rdr.ReadToEnd();

            // Close up and return
            rdr.Close();
            dataStream.Close();
            resp.Close();

            return (document);
        }
    }




вызываю
Код: sql
1.
select  dbo.fn_get_webrequest('https://mycompany.ru/HTTPTest?name=Иван&surname=Иванов', 'USER', 'PASS')



получаю хрень:
{ "MSG": "22.12.2020 17:15:46 ������ GET ������ � ���� Srvr=\"SERVERNAME\";Ref=\"SERVICENAME\";.", "surname": "������", "name": "����" }

Как сконвертировать полученный JSON в читабельное чтиво?
Спасибо
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030272
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Говнокод, который пишут вокруг обертки требует изрядных затрат времени на написание.

Чушь какая. Сгенерить обертки при наличии навыка - дело 2 минут. Если данные после этого надо пулять сразу в базу - ещё пара десятков строк. Это гораздо меньше строк г/кода на T-SQL с ручным составлением/парсингом SOAP, и пишется всё это гораздо быстрее. Сервис типа загрузки в базу курсов валют ЦБ РФ - популярная на этом форуме тема - пишется до рабочего состояния (с ведением логов, оповещением по почте об ошибках) за полчаса. Утверждаю это по факту наличия соответствующего опыта.
aleks222
Не говоря уж о нервах. Когда с этим чудом сталкиваешься, внезапно.

Ну, у всех бывают неприятные ощущения, когда вдруг выясняется, что чего-то не знаешь. Однако это вовсе не говорит о том, что предмет, о котором отсутствуют знания - плохой.
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030274
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

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

Спасибо
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030279
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я уже пробовал
req.ContentType = "application/json; charset=utf-8";
req.ContentType = "application/json; charset=widows-1251";
req.ContentType = "text/xml"

ничего не помогло
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030281
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

Посмотрите заголовки ответа, какая там кодировка
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030285
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через браузер выполнил. Нет тут ничего
...
Рейтинг: 0 / 0
HTTPS over T-SQL
    #40030312
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

Если принимаемая строка в UTF-8, то ее надо конвертировать в Unicode. В C# строки юникодовые.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / HTTPS over T-SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]