Обновление служб данных для .NET 3.5 SP1 ломает клиентов, есть идеи по откату?

Хорошо ... серьезная проблема.

Я сделал обновление, думая, что я мог бы продолжать использовать версию CTP2 Microsoft.Data.Services.Client библиотеки для подключения, пока они не обновят биты Silverlight. Нет. Хорошо, я могу с этим жить.

Я откатил службу до перекомпилированных библиотек CTP2 (Microsoft.Data.Services + Microsoft.Data.Services.Client), а затем обновил ссылку на службу в silverlight.

На этом этапе служба И клиент SL3 все используют биты CTP2. Должно быть хорошо? Неправильный. Очень-очень неправильно.

System.Data.Services.Client.DataServiceCollection »не содержит конструктора, который принимает аргументы« 2 »

Это серьезное препятствие для шоу, и не упоминалось, что это обновление нарушит функциональность CTP2. Предупреждения о SL dll, честно говоря, не хватило :)

Есть идеи, как это решить? Следует ли мне попытаться удалить обновление или я могу указать более старую библиотеку где-нибудь в файле конфигурации?

Помощь! :)

Кен


person Samurai Ken    schedule 17.12.2009    source источник
comment
предоставьте полную информацию о вашей ошибке. но похоже, что у вас возникли проблемы с тем, что приложение выбирает неправильную сборку во время выполнения. добавьте полную трассировку стека к вашему сообщению, надеюсь, мы сможем разобраться с этим.   -  person dmportella    schedule 17.12.2009
comment
Следа нет, это ошибка времени компиляции. Ясно, что это плохая реализация System.Data.Services.Client.DataServiceCollection ‹T›, но мои ссылки относятся к CTP.   -  person Samurai Ken    schedule 17.12.2009


Ответы (1)


Во-первых, проблема в том, что один из ваших проектов выбирает неправильную сборку, это может быть служба, но, скорее всего, это клиентское приложение.

Доступные конструкторы в CTP 2 v1.5 для DataServiceCollection:

private DataServiceCollection();
internal DataServiceCollection(IEnumerable<T> items);
protected DataServiceCollection(DataServiceContext context, string entitySetName, IEnumerable<T> items, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
internal DataServiceCollection(DataServiceContext context, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback, IEnumerable<T> items);

Конструкторы, доступные в версии RTM (установленном вами обновлении) KB976126:

public DataServiceCollection();
public DataServiceCollection(IEnumerable<T> items);
public DataServiceCollection(DataServiceContext context);
public DataServiceCollection(IEnumerable<T> items, TrackingMode trackingMode);
public DataServiceCollection(DataServiceContext context, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
public DataServiceCollection(IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
public DataServiceCollection(DataServiceContext context, IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
internal DataServiceCollection(object atomMaterializer, DataServiceContext context, IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);

Я предлагаю, если вы хотите использовать библиотеки CTP, проверить свои ссылки в своем клиентском приложении и любом другом приложении, которое использует System.Data.Services.Client.dll, и перейти на Microsoft.Data.Services.Client.dll (находится в программных файлах в папке ADO.NET Data Services V1.5 CTP2).

Я также установил последнюю версию, и в настоящее время я использую обе версии на своем ПК, и они работают.

Еще одна важная вещь - проверить глобальный кеш сборок, поскольку там будут установлены обе версии (при этом ddls CTP 2 имеет номер версии 99.0.0.0).

Что-то, что я сделал, это для библиотек CTP. Я добавил ссылки из папки ctp вместо глобального кеша сборок.

С Уважением

Даниэль Портелла

Обновление: это должен быть EntityClassGenerator, который используется ссылкой на веб-службу, ссылка на службу должна использовать dll GAC system.data.services.client для создания классов вместо старых CTP. На самом деле есть две вещи, которые вы действительно можете сделать: одна - это сделать то, что я сказал выше, а другая - удалить обновленное (удалить KB), что должно отменить сделанные изменения. Вы даже можете попробовать удалить старую ссылку на службу и создать ее снова, убедившись, что она использует библиотеки DLL CTP для генерации классов.

Это работает в моем решении, потому что я написал свою собственную реализацию DataServiceClientGenerator, чтобы делать волшебные вещи, которых не делает тот, который поставляется MS. Должно быть, поэтому я могу запустить обе установки без проблем.

Конец обновления.

person dmportella    schedule 17.12.2009
comment
Да, похоже, проблема в EntityClassGenerator - он получает версию GAC вместо версии из CTP. Это вызывает всевозможные проблемы. Мне нужно удалить обновление, я думаю, чтобы оно заработало, как я теперь вижу, способ указать путь к генератору. Кен - person Samurai Ken; 17.12.2009