Tag: wcf ria services

将WCF RIA服务查询结果加载到ObservableCollection

在我的Silverlight应用程序中,在创建ADO.NET实体数据模型和WCF RIA服务域服务类之后,在相应的ProductService类中,我有一个查询操作,它将一组Product实体返回给客户端,如下所示: public IQueryable GetProducts() { return this.ObjectContext.Products; } 现在我试图在客户端Silverlight应用程序中读取它并将结果加载到ObservableCollection: ProductContext pcontext = new ProductContext(); ObservableCollection prAvs = pcontext.GetProductsQuery(); 但是得到一个错误: 无法将System.ServiceModel.DomainServices.Client.EntityQuery类型隐式转换为System.Collections.ObjectModel.ObservableCollection 我该如何解决这个问题?

Datagrid不会刷新已更改的数据

有没有办法让datagrid监听数据库并在数据库数据发生变化时自动更新数据? 我使用SQL Server数据库。 如果可能的话,我想使用Linq-2-SQL

如何确保所有属性都已加载Silverlight ViewModel模式(并发控制?)

我正在努力寻找一个看似很小但相当痛苦的困境。 我有一个对象作为控件的视图模型。 基础视图模型旨在帮助显示所有可用事件之外的组对象及其相关事件的列表 。 在底层数据模型中,我有以下实体(EF)及其对应的关系: Group -> GroupEvent <- Event 视图模型有两个可观察的集合 – 一个用于事件,一个用于组。 事件集合表示可用于任何组的所有事件。 所有事件仅从WCF RIA服务加载一次,并且在到达时将每个事件的实体数据复制到本地对象中,该对象被推入事件集合中。 除了Event实体的属性之外,LocalEvent对象还定义了一个“IsSelected”布尔属性,默认情况下它被初始化为“false”。 此属性在具有双向绑定的CheckBoxGridColumn中使用,以便我可以将复选框’state设置为选中或取消选中。 ViewModel中的Groups集合以相同的方式初始化。 我创建了一个LocalGroup对象,它有一个LocalGroupEvents集合。 在事件加载后的构造函数中,我从WCF RIA服务加载所有Group实体(及其相关的GroupEvents)。 我将每个Group实体的所有属性复制到LocalGroup对象中,设置其LocalGroupEvents集合,最后将LocalGroup推送到ModelView的Groups可观察集合中。 最后,这两个集合将绑定到各自的网格。 组网格仅显示组名称,而事件网格显示每个事件旁边的复选框。 groups网格有一个SelectedItemChanged事件处理程序,每当它发生时,我抓取LocalGroup对象,我读取它的所有LocalGroupEvents并将Events网格中的“IsSelected”属性设置为true,以用于其Id与LocalGroupEvents中的Eventid匹配的每个事件。 嗯,这个工作流程很好。 100%的时间。 我遇到的问题是,如果事件的数据在组的数据之后到达,该怎么办? 我的意思是,由于任何RIA服务调用都是异步的,因此不会暂停线程以确保数据以正确的顺序到达。 如果只有一个组,并且在事件有机会加载之前加载速度超快,该怎么办? 在该场景中,即使用户点击该组,他们也将看不到任何内容,也无法编辑所选组。 在UI绑定到模型视图之前,如何确保数据以正确的顺序到达? 谢谢, Bleepzter

Linq&String.ToLower()奇怪的行为

我在服务器端有一个查询,它从一个zipcode表返回一个不同城市的列表。 我正在使用WCF RIA服务。 provincename == “”时,以下查询成功返回228个城市 public IQueryable GetCities(string provinceName) { return this.ObjectContext.ZipCodes.Where(z => z.Province.Contains(provinceName)) .GroupBy(z => z.City) .Select(g => g.FirstOrDefault()) .Select(zc => new CityPM() { ID = zc.ID, Name = zc.City }); } 但如果我使用如下的ToLower()方法,则当provincename == “”时,查询返回0个城市。 public IQueryable GetCities(string provinceName) { return this.ObjectContext.ZipCodes.Where(z => z.Province.ToLower().Contains(provinceName.ToLower())) .GroupBy(z => z.City) .Select(g => g.FirstOrDefault()) .Select(zc => new […]

Ria Services将复杂对象作为参数传递给查询域服务方法

我遇到了与此线程中指定的问题类似的WCF RIA服务的一些困难。 我正在创建的域服务方法(Query方法)应该采用复杂的对象参数。 示例域服务方法: public ComplexObjectResult GetComplexObject(ComplexObjectParameter test) { //do stuff } 参数对象: public class ComplexObjectParameter { [Key] public decimal ID { get; set; } … other fields } 我得到此编译错误: 错误70域操作条目’GetComplexObject’的参数’test’必须是预定义的可序列化类型之一 。 在网上搜索了一下后,我发现了这个msdn线程 。 它声明这是RIA服务的限制,并且该线程没有指定任何体面的解决方法。 现在似乎有一些肮脏的解决方法: 更改复杂参数以键入字符串和序列化/反序列化参数对象我自己,我发现一个非常hacky解决方案。 在域服务方法上使用[Invoke]标签并放弃所有RIA跟踪function,我首先使用RIA。 是否有替代方案可以提供缺点较少的上述解决方案? 是否有人为此问题找到了更优雅的解决方法? 谢谢

RIA服务中的exception处理

如您所知,使用标准WCF服务的FaultException来建议处理exception以隐藏exception详细信息。 这没关系,但我遇到了WCF Ria服务的问题。 我想从域服务抛出exception,客户端将处理该exception。 我想避免泄露exception的敏感信息,如堆栈跟踪,方法名称等。如果它是标准的WCF服务,我会使用FaultExceptionexception,但在Ria服务中,它不起作用。 无论我从域服务抛出什么样的exception,客户端总是会得到DomainOperationException。 有没有办法可以从域服务向Silverlight客户端抛出FaultException(不透露实际的exception细节)? 例如,我有一个登录窗口。 当用户点击登录按钮时,应该有几个validation失败,例如: 用户名或密码无效 用户帐户已被锁定 该帐户未激活 等等 我希望每个可能发生的错误都有错误类型。 客户端应该检查出错的地方并相应地显示错误消息。 我禁用了customErrors但它没有帮助。 任何帮助,将不胜感激。 谢谢

使用IIS或使用Windows服务进行自托管的WCF服务托管的选择

我们希望使用Asp.Net MVC 3开发新产品。这里的关键点是我们通过WCF Web服务与数据库交谈的所有内容。 我们正处于需要决定是否在IIS中托管WCF Web服务或使用Windows服务自托管的阶段。 我提出这个问题只是因为我想知道,主机WCF服务能满足我以下条件的更好选择。 我们期待120个并发请求/秒。 (可能每天12,000请求/访问) 安全方面(特别是WCF服务安全性) 可维护性 同时处理用户的并发请求(Windows Service可以处理与IIS相比的多个并发请求吗?) 请告诉我是否使用Windows服务进行IIS托管或自托管。 提前致谢。 (有人可以就此提出建议,因为这是决定进一步处理的一个非常关键的部分。)

.Net RIA服务:DomainService需要一个无参数的构造函数?

我在带有一些Silverlight组件的ASP.Net应用程序中使用.Net RIA Services的July CTP。 我从Silverlight打电话给RIA服务。 当我尝试在我的域服务(LinqToEntitiesDomainService对象)中使用Unity和构造函数dependency injection时出现了我的问题。 Silverlight应用程序现在抱怨没有无参数构造函数。 我不想拥有无参数构造函数,我希望Unity能够解析构造函数参数。 这可能吗? 难道我做错了什么? 或者我应该找到另一种方法来注入我的构造函数参数? public class DashboardService : LinqToEntitiesDomainService { private IUserService userService; public DashboardService(IUserService userService) : base() { if (userService == null) { throw ExceptionBuilder.ArgumentNull(“userService”); } this.userService = userService; } … 这是我得到的错误: Webpage error details User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET […]

如何使用WCF Ria Services跟踪实体更改?

我需要将对客户端上发生的实体所做的更改记录到数据库表中。 但是,当我进行更改并检查ChangeTracker属性时,它声称没有发生任何更改。 [服务] private static readonly ISomeDao someDao = DataAccess.SomeDao; [Query] public List GetSomeEntites(int someId) { var entities = someDao.GetSomeEntites(someId); entities.ForEach(e => e.StartTracking()); return entities; } [Update] public void UpdateSomeEntity(SomeEntity entity) { // inspect entity.ChangeTracker.OriginalValues…. nothing entity.StopTracking(); // inspect entity.ChangeTracker.OriginalValues…. nothing … // Update log table } [客户] public EntitySet SomeEntities { get { return […]

RIA服务不归还包含类型的收集财产

我有一个WCF RIA Services应用程序和一个UserRole类型的模型,其中包含UserPermission对象的集合。 我在域服务中使用.Include(“UserPermission”),当我调试它时,我确认它在返回之前肯定包含UserPermission类型。 当我调试Silverlight 3客户端时,它返回UserRoles,但UserPermission属性都是空的。 这些是显示在服务上具有UserPermissions的UserRoles。 由于服务和客户端上的一切看起来都是正确的,我专注于元数据类,但仍然找不到任何错误。 [MetadataTypeAttribute(typeof(UserRole.UserRoleMetadata))] public partial class UserRole { internal sealed class UserRoleMetadata { public int RoleID; public string Name; [Include] [Association(“UserPermissions”, “RoleID”, “PermissionID”)] public EntityCollection UserPermissions; } } 这是域服务方法: public IEnumerable GetUserRoles() { IEnumerable roles = this.ObjectContext.UserRole.Include(“UserPermissions”); return roles; // In debug, roles.First().UserPermissions.Count = 2 here // For now, […]