Надеемся, что WCF
имеет расширенные возможности управления экземплярами и параллелизмом на стороне службы через Throttling
.
Мой сервисный клиент - приложение ASP.NET
. Он использует более одной WCF
службы, поэтому я создаю и параметризирую WCF
клиента во время выполнения (файл конфигурации не используется).
Только адрес конечной точки является динамическим, и все службы (используемые клиентом) имеют одинаковые сигнатуры методов (один и тот же контракт).
По этой причине я ссылался на службу через Visual Studio
, и она создала мой прокси-сервер службы, поэтому я просто позаботился об адресе конечной точки во время выполнения:
class MyWcfClient
{
void DoSomething(string endpintAddress, int data)
{
// Create 'binding' and 'endpoint' ('endpoint' address is dynamic)
ServiceReference.ServiceClient serviceClient = new ServiceReference.ServiceClient(binding, endpoint);
// Parametrize 'serviceClient'
// Call WCF method (send 'data' to appropriate endpoint)
serviceClient.CLose();
}
}
Поскольку клиент является приложением asp.net, каждый запрос выполняется в своем собственном рабочем потоке (вызовы методов WCF очень легкие и быстрые, поэтому поток не будет блокироваться в течение длительного времени).
Мой вопрос касается инстанцирования и параллелизма на стороне клиента.
Должен ли класс MyWcfClient
быть Singleton
с одним экземпляром serviceClient
или это будет static
класс и новый serviceClient
для каждого вызова?
Должен ли я создать serviceClient
(т.е. массив или список) на основе конечных точек (есть 10-100 конечных точек)?
Обратите внимание, что мои потоки asp.net не должны быть заблокированы в течение длительного времени (т. Е. Ожидание в очереди для отправки связанных с ними data
через WCF
)