Как я получаю адрес клиента из Сервисного приложения WCF?

Помните, что соединения объединены на connectionstring. Если у Вас будет много баз данных и подключения с помощью многих connectionstrings, приложение создаст новое соединение, когда ни один не будет существовать с корректным connectionstring. Тогда это объединит то соединение и, если пул будет полон, ударьте существующее соединение. Значение по умолчанию Размер Объединения Max является 100 соединениями, поэтому если Вы обычно возвратитесь больше чем через 100 баз данных, Вы закроете и откроете соединения все время.

Это не идеально, но можно решить проблему, всегда соединяясь с единой базой данных (одна строка подключения) и затем переключить ИСПОЛЬЗОВАНИЕ 'контекста дб [DBName]'. Существуют недостатки:

  • Вы теряете способность определить, что пользователь/передача для каждого подключения представляет в виде строки (Вашему пользователю приложения нужно разрешение ко всем базам данных).
  • Ваш SQL становится более сложным (особенно при использовании out-of-the-box ORM или сохраненного procs).

Вы могли экспериментировать с увеличением Размера Объединения Max, если Ваше количество базы данных не огромно. Иначе, если некоторые базы данных используются часто, в то время как другие не, Вы могли выключить объединение на нечастом dbs. Оба объекта настроены через connectionstring.

До метрик, следя за развитием событий входа в систему и выхода из системы на SQL Server хорошее начало. Если Ваше приложение объединяет приятно, Вы не должны видеть многие из них.

5
задан MGSoto 10 July 2009 в 21:37
поделиться

3 ответа

В версии 3.0 это довольно сложно; но был улучшен в версии 3.5 ( прочтите «Определить IP-адрес клиента в WCF 3.5 »). Однако мне ничего не известно о событии.

7
ответ дан 13 December 2019 в 05:40
поделиться

Какой адрес вы ищете? IP-адрес?

Если да, я надеюсь, вы знаете об ограничениях на это - он будет неточным, если клиент находится на другой стороне устройства NAT или Интернет-прокси.

2
ответ дан 13 December 2019 в 05:40
поделиться

If System.Web.HttpContext.Current.Request.UserHostAddress isn't null, then it has the remote address. But that might be a proxy or load balancer (the case I have in our production environment).

2
ответ дан 13 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

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