Образец резьбы: Цепочка и петля - PullRequest
0 голосов
/ 16 сентября 2009

Мне нужно использовать 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 отвлекать вас, но если у вас есть какие-либо комментарии, дайте мне знать. :)

1 Ответ

0 голосов
/ 18 сентября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...