.NET 3.5 SP1的数据服务更新打破了客户端,回滚的任何想法?

时间:2009-12-17 04:05:29

标签: silverlight wcf-data-services astoria

好的......严重的问题。

我做了the update,认为我可以继续使用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的警告不够:)

有关如何解决此问题的任何想法?我应该尝试卸载更新,还是可以在某个配置文件中指定旧库?

帮助! :)

1 个答案:

答案 0 :(得分: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 dll,检查客户端应用程序上的引用以及使用System.Data.Services.Client.dll并更改为Microsoft.Data.Services的任何其他应用程序。 Client.dll(位于ADO.NET Data Services V1.5 CTP2文件夹中的程序文​​件中)。

我也安装了最新版本,目前正在我的PC上运行这两个版本,它正在运行。

另一个重要的事情是检查全局程序集缓存,因为两个版本都将安装在那里(CTP 2 ddls的版本号为99.0.0.0)。

我所做的是为CTP dll添加了ctp文件夹中的引用而不是全局程序集缓存。

此致

Daniel Portella

更新:Soulhuntre它必须是Web服务引用正在使用的EntityClassGenerator,服务引用必须使用GAC system.data.services.client dll来生成类而不是旧的CTP的。 你可以做两件事,一件事是做我上面说的,另一件是删除应该还原所做更改的更新(卸载KB)。您甚至可以尝试删除旧的服务引用并再次创建它,同时确保它使用CTP dll来生成类。

它适用于我的解决方案,因为我已经编写了我自己的DataServiceClientGenerator实现,做了MS提供的那些不会做的神奇的事情,这必须是为什么我可以运行两个安装没有问题。

更新结束。