Мне нужно использовать WCF API для сохранения данных в БД. Обычно я бы использовал цепочку, как в примере ниже:
IClientBroker clientBroker = UIContext.CreateWcfInterface<IClientBroker>("Data/ClientBroker.svc");
clientBroker.BeginSetClientBusinessName(_client.ID, businessName, (result) =>
{
_client = ((IClientBroker)result.AsyncState).EndSetClientBusinessName(result);
clientBroker.BeginSetClientAddress(_client.ID, addressObservableCollection, postcodeZip, (result2) =>
{
_client = ((IClientBroker)result2.AsyncState).EndSetClientAddress(result2);
clientBroker.BeginSetClientTelephone(_client.ID, telephone, (result3) =>
{
_client = ((IClientBroker)result3.AsyncState).EndSetClientTelephone(result3);
clientBroker.BeginSetClientFax(_client.ID, fax, (result4) =>
{
_client = ((IClientBroker)result4.AsyncState).EndSetClientFax(result4);
if (customFields.Save(validationSummaryBridge))
{
CloseWindow(true, "ClientID=" + _client.ID.ToString());
}
else
{
validationSummary.Errors.Add(new ValidationSummaryItem("Failed to save Custom Fields"));
}
}, clientBroker);
}, clientBroker);
}, clientBroker);
}, clientBroker);
}
Это дает мне ложное синхронное поведение, которое мне нужно, чтобы исключения генерировались своевременно, и я мог реагировать на события проверки.
Однако это не очень хорошо отображается, когда у меня есть цикл полей для сохранения. Например, какой шаблон лучше всего сохранить в следующем списке «Пользовательских полей», где каждое пользовательское поле должно быть сохранено с помощью одного вызова WCF?
ICustomFieldsBroker customFieldsBroker = UIContext.CreateWcfInterface<ICustomFieldsBroker>("Data/CustomFieldsBroker.svc");
foreach (CustomField customField in _customFields)
{
string newValue=_customFieldControlDictionary[customField].CustomField.Value;
customFieldsBroker.BeginSetCustomFieldValueForItem(DataTypeID, DataItemID, customField.Key, newValue, (result) =>
{
((ICustomFieldsBroker)result.AsyncState).EndSetCustomFieldValueForItem(result);
}, customFieldsBroker);
}
В вышеприведенном примере это просто вызвало бы, скажем, 5 запросов к API / потокам WCF, которые потенциально могли бы вернуть ПОСЛЕ закрытия формы. Мне нужно, чтобы они «выстроились в очередь», чтобы я мог перечислить их статус и вернуться к форме.
Большое спасибо.
Не позволяйте WCF отвлекать вас, но если у вас есть какие-либо комментарии, дайте мне знать. :)