Для изменения размера нажмите или перетащите

Подключение через WCF

S#.Data может использоваться в серверном режиме, в данном режиме можно удаленно подключиться к S#.Data и получить имеющиеся данные в хранилище или записать новые. Включение серверного режима S#.Data описано в пункте Настройки.

Для подключения к S#.Data через WCF в S#.API есть класс RemoteStorageClient. Ниже приведен пример подключения к S#.Data с настроенным Локальным пользователем с логином "hydra_user" и паролем "qwerty", добавление Локального пользователя описано в пункте Настройки

C#
...
var client = new RemoteStorageClient(new InMemoryExchangeInfoProvider(), new Uri("net.tcp://localhost:8000"))
{
    Credentials = { AutoLogon = true, Email = "hydra_user", Password = "qwerty".To<SecureString>() },
};
...

Получение всех имеющихся в S#.Data инструментов:

C#
...
var storageRegistry = new StorageRegistry();
client.Refresh(storageRegistry.GetSecurityStorage(), new Security(), s => { }, () => false);
var allSecurity = storageRegistry.GetSecurityStorage().Lookup(new Security());
...

Получение всех имеющихся данных в S#.Data по инструменту, и сохранение в локальном хранилище:

C#
...
StorageRegistry storageRegistry = new StorageRegistry();
List<DataType> supportedDataTypes = new List<DataType>()
    {
        DataType.Create(typeof (TimeFrameCandleMessage), TimeSpan.FromMinutes(1)),
        DataType.Create(typeof (TimeFrameCandleMessage), TimeSpan.FromMinutes(5)),
        DataType.Create(typeof (TimeFrameCandleMessage), TimeSpan.FromMinutes(15)),
        DataType.Create(typeof (TimeFrameCandleMessage), TimeSpan.FromHours(1)),
        DataType.Create(typeof (TimeFrameCandleMessage), TimeSpan.FromDays(1)),
        DataType.Create(typeof (ExecutionMessage), ExecutionTypes.Tick),
        DataType.Create(typeof (ExecutionMessage), ExecutionTypes.Transaction),
        DataType.Create(typeof (ExecutionMessage), ExecutionTypes.OrderLog),
        DataType.Create(typeof (QuoteChangeMessage), null),
        DataType.Create(typeof (Level1ChangeMessage), null),
        DataType.Create(typeof (NewsMessage), null),
    };
...
foreach (var dataType in supportedDataTypes)
{

    var localStorage = storageRegistry.GetStorage(security, dataType.MessageType, dataType.Arg,
        localMarketDataDrive, StorageFormats.Csv);
    var remoteStorage = client.GetRemoteStorage(security.ToSecurityId(), dataType.MessageType, dataType.Arg,
        StorageFormats.Csv);

    var dates = remoteStorage.Dates.Where(date => date >= start && date <= end).Except(localStorage.Dates).ToArray();
    foreach (var dateTime in dates)
    {
        using (var stream = remoteStorage.LoadStream(dateTime))
        {
            localStorage.Drive.SaveStream(dateTime, stream);
        }
        Console.WriteLine(dataType.MessageType + "; " + dataType.Arg + "; " + dateTime);

        var localStor = localStorage.Load(dateTime);
        foreach (var marketData in localStor)
        {
            Console.WriteLine(marketData);
        }
    }
}
...