标签: wcf-ria-services

如何使用DomainContext.Load填充我的ViewModel的属性?

我有一个Silverlight页面,它从视图模型类获取其数据,该类聚合来自各种(RIA服务)域服务的一些数据.

理想情况下,我希望页面能够将其控件数据绑定到视图模型对象的属性,但由于DomainContext.Load异步执行查询,因此页面加载时数据不可用.

我的Silverlight页面包含以下XAML:

<navigation:Page x:Class="Demo.UI.Pages.WidgetPage" 
               // the usual xmlns stuff here...
               xmlns:local="clr-namespace:Demo.UI.Pages" mc:Ignorable="d"
               xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"

                d:DataContext="{d:DesignInstance Type=local:WidgetPageModel, IsDesignTimeCreatable=False}"

               d:DesignWidth="640" d:DesignHeight="480"
               Title="Widget Page">
        <Canvas x:Name="LayoutRoot">
            <ListBox ItemsSource="{Binding RedWidgets}" Width="150" Height="500" />
        </Canvas>
    </navigation:Page>
Run Code Online (Sandbox Code Playgroud)

我的ViewModel看起来像这样:

public class WidgetPageModel
{
    private WidgetDomainContext WidgetContext { get; set; }

    public WidgetPageModel()
    {          
        this.WidgetContext = new WidgetDomainContext();

        WidgetContext.Load(WidgetContext.GetAllWidgetsQuery(), false);            

    }

    public IEnumerable<Widget> RedWidgets
    {
        get
        {
            return this.WidgetContext.Widgets.Where(w => w.Colour == "Red");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为这种方法必须是根本错误的,因为异步性质Load意味着当ListBox数据绑定时,小部件列表不一定被填充.(我的存储库中的断点显示正在执行填充到集合的代码,但仅在页面呈现之后.)

有人可以告诉我正确的方法吗?

silverlight mvvm viewmodel silverlight-4.0 wcf-ria-services

7
推荐指数
1
解决办法
3592
查看次数

WCF RIA是否执行不良设计?

过去几周我一直在使用Silverlight涉足WCF RIA,我发现使用它生成设计良好的软件非常困难.我的印象是,它是一种最适合"快速应用程序开发",原型设计和花哨的演示的工具.

举个例子,为了充分利用RIA,我发现你几乎必须从头到尾依赖你的数据模型.WCF RIA的最佳功能(如端到端验证和EF集成)要求您尽可能地呈现实体框架数据模型,一直到您的表示层.这就排除了使用服务层模式,数据映射器或DTO 设计软件的可能性.由于EF的限制,我也发现自己正在努力(迄今无济于事)创建一个具有真正域模型的应用程序.

代码生成的东西很好,我可以看到它节省了我的时间,除了它不支持像多对多关系这样的基本场景.这使得我必须通过暴露中间外键表来通过EF公开我的更多数据库实现细节.

除了这些问题之外,众所周知WCF RIA几乎不可能进行测试.DomainContext类不会隐藏在接口后面,由于更改跟踪和其他细微之处,这样做非常困难.在我看到的每一个案例中,ViewModel最终都直接依赖于DomainContext实现.即使这种依赖是构造函数注入它也没有意义,因为它无法合理地被嘲笑.

所以我想我的问题是双重的:WCF RIA是否强制执行糟糕的设计?如果是这样,有没有合理的解决方法,最终我失去了平台的大部分优势?如果没有,有人能指出一些文献,展示如何使用WCF RIA基于可靠的模式生成优秀的设计吗?

silverlight wcf-ria-services

7
推荐指数
2
解决办法
586
查看次数

RIA域名服务应包含多少个实体?

我想知道如何在RIA中准确实现域服务.在单个域服务中包含整个域模型中的所有实体是否常见,从而使服务负责整个数据库?这是通常的方式吗?我真的没有理由将数据访问分成不同的服务,但我想知道这是否被认为是一种好的做法,以及这种方法的优点和缺点是什么.

另外,将域上下文注册为IOC的单例是否被认为是一种好的或坏的做法,以便整个应用程序使用相同的数据集,从而避免并发问题和类似的问题?

思考?

谢谢

c# dns wcf-ria-services

6
推荐指数
1
解决办法
1042
查看次数

如何在不使用分页的情况下实现延迟加载的Silverlight数据网格

使用全新发布的RIA服务中的业务应用程序模板,您可以看到许多示例使用数据网格DomainDataSource与a结合使用DataPager.属性PageSize和LoadSize可用于调整要在一个页面中显示的数据量以及在后台预取的数据.

现在我想要一个带滚动条但没有寻呼机的数据网格.底层DomainDataSource应该只加载在网格中显示的数据.当用户向下滚动到尚未在数据上下文中的项时,它应该触发另一个加载.是否有任何示例实现如何执行此操作?

silverlight silverlight-4.0 wcf-ria-services data-virtualization

6
推荐指数
1
解决办法
3191
查看次数

为什么与我的Silverlight客户端共享资源文件(resx)如此困难?

我正在尝试通过将资源文件链接到我的客户端,从我的Web(RIA服务?Silverlight主机)到客户端(Silverlight)共享资源文件(.resx文件).当我尝试使用该ResourceManager对象访问资源时,我收到以下错误:

System.Resources.MissingManifestResourceException was caught
  Message=Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "PPCa.Modules.ProjectManager.Client.ViewModels.ResourceStrings.resources" was correctly embedded or linked into assembly "PPCa.Modules.ProjectManager.Client" at compile time, or that all the satellite assemblies required are loadable and fully signed.
  StackTrace:
       at System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName)
       at System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
       at System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)
       at System.Resources.ResourceManager.GetString(String name, …
Run Code Online (Sandbox Code Playgroud)

silverlight resx wcf-ria-services

6
推荐指数
1
解决办法
2671
查看次数

WCF-RIA服务客户端OutputCache - 如何强制刷新缓存

正如在另一个问题中提到的,我们在项目中结合Silverlight导航框架使用WCF-RIA服务.部分是搜索功能.搜索按钮将导航到特殊搜索页面,将搜索查询放入URL,然后在服务器上触发RIA请求.

对于此请求,我们使用此属性启用了客户端输出缓存:

[OutputCache(OutputCacheLocation.Client, duration: 2 * 60)]
Run Code Online (Sandbox Code Playgroud)

现在,有时(特别是在演示中)我们的用户知道,底层数据源已经改变,他们想要刷新搜索以查看当前结果.

设置LoadOperations LoadBehavior不会刷新缓存.

现在我们有一个(部分)解决方案:我们为我们的服务添加了一个特殊的缓存计数器属性.该属性被服务忽略,仅用于解决缓存问题.每当用户点击搜索按钮时,缓存计数器就会增加,我们会在缓存中工作.如果用户向后或向前导航到搜索页面,则从Url检索搜索计数器,并且该请求由缓存提供.

现在的问题是:是否有更好的方法来强制刷新客户端缓存?

此外:如果用户选择浏览器刷新按钮刷新搜索页面,我们的解决方法将失败.在这种情况下,缓存计数器仍然从URL中获取,并且从缓存而不是服务器检索数据.我发现没有办法从我们的Silverlight客户端检测刷新(我已经看到一个使用服务器端会话变量的建议,这不是一个选项,因为我们的服务器是完全无状态的).

silverlight caching wcf-ria-services

6
推荐指数
1
解决办法
1248
查看次数

默认情况下,WCF服务是基于restful还是基于soap?

我是WCF的新手,刚刚提供了样品服务.如果我们没有在任何地方指定,请默认指导我WCF服务是肥皂还是休息?我试图运行我的服务的URL并获得此页面.我觉得它是基于SOAP的.请指导.

谢谢

wcf wcf-binding wcf-data-services wcf-ria-services

6
推荐指数
2
解决办法
1813
查看次数

EF5 Code First和RIA Services Silverlight"对象引用未设置为对象的实例"错误构建客户端

我正在使用Code First为使用RIA服务的silverlight中的实体框架5建立一个新项目.由于我遇到的一些问题,我已经创建了一个测试项目,并将在下面发布代码.

也就是说,每当我尝试构建应该生成客户端代理类的silverlight客户端项目时,我都会得到一个"对象引用未设置为对象的实例"错误.

为了清楚起见,这个错误不是在运行或调试应用程序时,而是在构建它时.

我已经发现,只有在我的Code First类中定义了任何导航属性/外键时才会发生这种情况.

今晚的任何帮助将不胜感激.

    public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime? BirthDate { get; set; }

    public virtual List<Character> Characters { get; set; }
}

public class Character
{
    public int CharacterId { get; set; }
    public int PersonId { get; set; }
    public virtual Person Person { get; set; }
    public string CharacterName { get; set; …
Run Code Online (Sandbox Code Playgroud)

silverlight entity-framework wcf-ria-services ef-code-first silverlight-5.0

6
推荐指数
1
解决办法
2331
查看次数

WCF RIA服务中的链接文件不在TFS Build服务器中构建

我刚刚设置了一个TFS(2012)服务器,现在我正在尝试通过TFS Build服务器构建完整的代码(在VS 2010中用.NET 4.0编写).但在我的解决方案中,我还有一个包含链接文件的WCF RIA项目,因为它们也在其他地方使用,并且不可能在WCF/Silverlight中添加对常规.NET二进制文件的引用.

一切都在我的开发机器上构建没有任何问题但是当我全部检查时,创建一个标准的构建定义并运行该构建定义我遇到了以下问题.链接文件usings(例如UsingNamespace)也是由我们构建并在WCF/Silverlight之前构建的其他项目,但是在通过TFS构建服务器构建时弹出以下错误:

找不到类型或命名空间'UsingNamespace'(您是否缺少using指令或程序集引用?)'

我看过这个问题有什么解决办法吗?

编辑1

只是尝试设置Copy to Output Directory链接文件的属性,Copy Always但这仍然给我同样的错误,因为我期待.问题是链接文件放在可以使用的地方,usings但WCF RIA服务无法访问/查找使用.

编辑2

刚刚尝试了我的本地测试TFS,我可以在那里做我想做的事情,在那里我做了一个构建定义,只需要使用链接文件构建项目所需的解决方案.这没有任何问题.然后我在我们的TFS服务器上尝试了相同的新构建定义,它具有与我的测试TFS相同的解决方案,在这里它不起作用.我确定的唯一区别是我的测试TFS是TFS 2012 Update 1,而我的生产TFS还没有更新1.我下周试着安装它.

编辑3

我刚刚将生产TFS更新为Update 1,但它仍然无法使用我的临时构建定义,该定义仅包含使用链接文件构建silverlight应用程序所需的项目.两个工作区在两个服务器上都是相同的,要构建的项目也是相同的.

tfs using tfsbuild wcf-ria-services tfs2012

6
推荐指数
1
解决办法
784
查看次数

更新至32.0.1700.76 m后,Chrome不会显示Silverlight RIA服务消息的网络流量

几天前,谷歌浏览器自动从版本31*更新到版本32.0.1700.76米.在那之后,它不再显示在DevTools网络流量请求/"application/msbin1"类型的响应中.这些请求在所有其他浏览器的开发工具(FireFox,IE)和Fiddler中都可见,但在Chrome中则不可见.此版本中Chrome的弹出菜单也非常糟糕.我没有看到将Chrome降级到以前版本的方法.请帮助我不想卸载Chrome.

网络流量甚至不显示页面加载的资源(XAP文件).示例:http: //www.microsoft.com/silverlight/pixel-shader/demo/ 此页面加载文件SilverlightShaderApp.xap,但新Chrome版本的开发工具从不在网络选项卡中显示.

我在这里发布了这个问题,因为它是开发人员的问题,而不仅仅是Chrome用户.

我在谷歌Chrome论坛上也报告了这个问题:这里.

wcf-ria-services google-chrome-devtools silverlight-5.0

6
推荐指数
1
解决办法
1404
查看次数