Предположим, я следующий код WCF:Как передать несколько методов (с параметрами) как параметр?
try
{
ServiceClient proxy = new ServiceClient();
proxy.ClientCredentials.UserName.UserName = "user";
proxy.ClientCredentials.UserName.Password = "password";
proxy.GetData(2);
if (proxy.State = CommunicationState.Opened)
{
proxy.GetData("data");
}
proxy.Close();
}
catch (FaultException ex)
{
// handle the exception
}
И так как я заметил, что попытка ... поймать и другая логика повторяется, не говоря уже о том, что создание WCF вызов дорого, я хочу отправить многие «методы и параметры» к этой функции.
По существу проходят GetData(2)
и GetData("data")
как массив методов, и результаты возвращаются либо асинхронно, либо синхронно.
Как бы это осуществить?
Я полагаю, что для обработки результатов [] и общей блокировки результатов [] можно было бы иметь два объекта «ref». Однако я не уверен, как передавать «методы с параметрами» в качестве параметра другой функции.
Возможно, другим способом взглянуть на это может быть массив указателей на функции, с той же функцией с разными параметрами.
Может ли кто-нибудь подтолкнуть меня к правильному пути?
Подробнее:
Я задаю этот вопрос so I can optimize this approach to handling WCF exceptions and retries но так что я не всегда должен открыть/закрыть клиент после каждого вызова.
Вы даже можете использовать версию Action, если они * делают * что-то возвращать. Вы можете включить назначение в лямбда. Это может быть опасно, но иногда это может быть то, что вы хотите. – Magus
Да, или вы можете также иметь {} тело для своего действия вместо лямбды и делать что-нибудь в нем, а затем ничего не возвращать из действия. Много возможностей. –
Я что-то пропустил, потому что не думаю, что код даже компилируется ... Я получаю «Делегат» System.Func «не принимает 1 аргумент». Я уверен, что вы не можете просто добавлять делегатов в список с передаваемыми аргументами, как если бы вы вызывали метод ... –
evanmcdonnal