У меня есть служба WCF, которая вызывается из моего приложения Silverlight 3 (с C#). Услуга вызывается для каждого элемента в заполненном пользователем списке. Когда в списке есть только один элемент, все работает нормально. Несколько элементов вызывают ошибку иногда. Я немного тестировал, и иногда я получаю сообщение об ошибке с двумя пунктами, иногда нет. С 4-мя пунктами теста, один раз я получаю 2 результата, после которых ошибка.Ошибка при быстром вызове службы WCF
Хуже всего то, что ошибка просто говорит: «Remoteserver вернул ошибку: NotFound». Ошибка является «CommunicationException» и выбрасывается в результате (System.IAsyncResult) EndMethod метод
Вот вызов:
foreach (ListBoxItem lbItem in categorySeeds)
{
Helper.Instance.service.ClusterAsync(Helper.Instance.language.value,
((KeyValuePair<string, int>)lbItem.Tag).Value,
Helper.Instance.clusterLevel,
Helper.Instance.clusterDelay,
Helper.Instance.clusterTolerance,
Helper.Instance.clusterMaxCategories,
Helper.Instance.similarity);
}
Я помню, что когда-то «решить» проблему путем вызова «повторного использования» из AppPool, который содержал мой WCF ... так что, возможно, что-то не так с конфигурацией? Кто-нибудь знает, смогу ли я сделать WCF более значимым сообщение об ошибке, чем просто «NotFound»?
Спасибо заранее, Frank
ОТВЕТ: Проблема была вызвана одновременным доступом нескольких WCF-Сервис-вызовов. Служба вызывает StoredProcedures, которые работают с объектами Synonym, которые каждый SP изменяется на значение, заданное параметром ... поэтому я должен его исправить.
Описанная проблема должна быть довольно распространенной, конечно же, решение состоит не в том, чтобы заниматься дросселированием? Клиент не будет просто так просто открывать так много соединений с одним и тем же сервером, что, несомненно, поставит на очередь такие запросы на клиенте и будет иметь только несколько одновременных запросов. Кроме того, OP иногда описывает проблемы с двумя записями, поэтому я не могу понять, как поможет изменение дроссельной заслонки. Я подозреваю, что подробные исключения покажут код serveride, который неправильно обрабатывает параллелизм нескольких вызовов. – AnthonyWJones
Ты абсолютно прав, Энтони. У меня уже было свойство serviceDebug на месте, но при потреблении WCF с Silverlight 3 вам нужно немного поработать, чтобы действительно получить ошибку: http://msdn.microsoft.com/en-us/library/dd470096(VS .96) .aspx. Получив это на месте, я обнаружил, что ошибка вызвана одновременным доступом к SQL-StoredProcedures с помощью WCF-сервиса. Я использую синоним для запроса разных таблиц, имеющих одну и ту же структуру. Но это еще одна история ... * вздох * – Aaginor