SL4 WCF RIA查询问题:“完成”在它真正完成之前发生了吗?

时间:2010-08-13 15:11:46

标签: sql-server-2008 silverlight-4.0 entity-framework-4 wcf-ria-services

我在SL4应用程序中使用的WCF RIA服务有一个奇怪的小问题。这是我得到的按钮点击处理程序的代码:

    private void btnTest_Click(object sender, RoutedEventArgs e)
    {
        LanguageContext context = new LanguageContext();
        LoadOperation<Language> op = context.Load(context.GetLanguagesQuery());

        op.Completed += (obj, args) =>
            {
                if (!op.HasError)
                {
                    System.Threading.Thread.Sleep(500);
                    MessageBox.Show(context.Languages.FirstOrDefault().DisplayName);
                }
            };
    }

请注意,处理程序中有Sleep调用。没有那个睡眠调用,我得到一个异常(在向服务器发送请求时发生了传输级错误。(提供者:共享内存提供者,错误:0 - 没有进程在管道的另一端。))。如果这段代码在“已完成”处理程序中,我认为它实际上是在它到达那里时完成的。为什么没有Sleep()会死?顺便说一句,Sleep()不是生产的选择,它只是一个问题解决的工具:)

2 个答案:

答案 0 :(得分:1)

所以,如果我将“pooling = false”添加到我的连接字符串中,一切正常。但是,我真的不喜欢那个答案。连接池是一件好事。有没有办法让它继续下去并让事情仍然有效?

答案 1 :(得分:0)

我也可以重现这个问题。

例如,我有一个单元测试,如果连续运行两次将第二次失败。

此单元测试执行以下操作:
1.使用自定义Entity Framework 4.1 DbContext Initiailzer来删除并重新创建数据库 2.启动silverlight应用程序
3.单击silverlight应用程序中的按钮

此时,silverlight应用程序调用wcf ria服务来查询刚创建的数据库。
但是,每次第二次运行单元测试时,都会出现相同的错误 但是,如果我再次单击该按钮,则错误会立即消失。

在我的连接字符串中设置“Pooling = False”并没有解决我的问题。

但是,我能够通过在创建数据库后重新启动托管silverlight应用程序和ria服务的Web服务器来解决此问题。

就我而言,我刚决定使用Cassini Dev Web Server v4并在该Web服务器而不是iis上运行测试。

Windows 7旗舰版x64
Visual Studio 2010 SP1
实体框架4.1
适用于Silverlight 4的WCF RIA Services SP1 Silverlight 4
MSTest的

修改
实体框架4.1 Update 1包含一个错误修复,用于在使用SQL身份验证时无需在连接字符串中指定“Persist Security Info = True”。
http://www.microsoft.com/download/en/details.aspx?id=26825

我(还)确定该错误是否相关,也可能解决此问题。