Как я могу определить имя схемы, используемое, в спящем режиме объекты во время запроса?

Используйте SignalR . Много информации здесь и здесь . Эта статья также выглядит очень хорошо.

Что касается фактического кода, создайте службу WCF и используйте NuGet, чтобы добавить ссылку на SignalR, а затем добавьте класс-концентратор:

public class ServiceMonitorHub : Hub
{
}

Вам также потребуется добавить класс запуска Owin для запуска концентратор SignalR:

[assembly: OwinStartup(typeof(YourNamespace.SignalRStartup))]
namespace YourNamespace
{
    public class SignalRStartup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();
        }
    }
}

Затем ваши обработчики службы могут получить ссылку на этот концентратор и отправлять сообщения всем подключенным к нему клиентам:

public class Service1 : IService1
{
    public string GetData(int value)
    {
        // send msg to clients
        var hub = GlobalHost.ConnectionManager.GetHubContext();
        hub.Clients.All.BroadcastMessage();

        return string.Format("You entered: {0}", value);
    }

Затем ваш клиент WPF подключается к этому серверу SignalR и перехватывает обработчики для получения сообщений, отправляемых обработчиками служб, в этом примере содержится обработчик кнопок, который вызывает службу, а также подключение к концентратору SignalR для получения сообщений, возвращающихся назад:

public partial class MainWindow : Window
{
    private HubConnection Connection;
    private IHubProxy HubProxy;

    public MainWindow()
    {
        InitializeComponent();
        Task.Run(ConnectAsync);
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        using (var service = new ServiceReference1.Service1Client())
            service.GetData(1);
    }

    public async Task ConnectAsync()
    {
        try
        {
            this.Connection = new HubConnection("http://localhost:59082/");
            this.HubProxy = this.Connection.CreateHubProxy("ServiceMonitorHub");
            HubProxy.On("BroadcastMessage", () => MessageBox.Show("Received message!"));
            await this.Connection.Start();
        }
        catch (Exception ex)
        {
        }
    }
}

}

Обратите внимание, что клиентам необходим пакет NuGet SignalR.Clients (в отличие от просто SignalR).

Существуют и другие способы, которыми сервисы могут вызывать клиентов-концентраторов, эта ссылка показывает несколько других.

6
задан Paul Tomblin 14 February 2009 в 16:27
поделиться

2 ответа

Вот страница, которая перечисляет некоторые способы, которыми можно справиться, несколько схем в В спящем режиме. Я, вероятно, пошел бы с реализацией Вашего собственного поставщика соединения. Вы, вероятно, захотите отключить кэширование также.

3
ответ дан 17 December 2019 в 07:09
поделиться

Мы столкнулись с этой проблемой на работе. Я зафиксировал его, как Robert предполагает, путем создания поставщика соединения (т.е., реализация DataSource), названный ""OracleSchemaRemappingDataSource" и использования пружины, чтобы сделать инфраструктуру.

В основном этот источник данных реализует getConnection (). Реализация того метода работает путем получения соединения от некоторого другого источника данных пружинной инжекцией, которую это принимает, чтобы быть соединением оракула и затем выполнением

ALTER SESSION SET CURRENT_SCHEMA = 'someotherschema'

и их пасующий назад то соединение.

Вся быть в спящем режиме конфигурация старается использовать имена, не указывая схемы для них.

Также: с этим Вы не хотите отключать кэширование - позволяют, в спящем режиме для управления подключениями, столь же нормальными, как мы не делаем никакого волшебства в рамках приложения, такого как использование различных соединений на основе в расчете на пользователя.

1
ответ дан 17 December 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: