开发者

SL4 WCF RIA Query Issue: "Completed" happening before it's really completed?

开发者 https://www.devze.com 2023-01-11 05:38 出处:网络
I have a strange little issue with a WCF RIA service I\'m using in a SL4 application. Here is the code for a button click handler I\'ve got:

I have a strange little issue with a WCF RIA service I'm using in a SL4 application. Here is the code for a button click handler I've got:

    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);
                }
            };
    }

Note that there's a Sleep call in the handler. Without that sleep call, I get an exception (A transport-level error has occurred when sending the request to the server. (provider: Shared Memory Provider, error: 0 - No process is on the other end of the pipe.)). If this code is in the "Completed" handler, I figured it was actually, well, completed by the time it got there. Why does it die without the Sleep()? BTW, the Sleep() isn't an option for product开发者_JAVA技巧ion, it was just a problem-sovling tool :)


So, If I add "pooling=false" to my connection string, everything works. However, I don't really like that answer. Connection pooling is a good thing. Is there a way to leave it on and have things still work?


I can also reproduce this issue.

For example, I have a unit test that if run twice in succession will fail the second time.

This unit test performs a few things:
1. Drops and recreates the database using a custom Entity Framework 4.1 DbContext Initiailzer
2. Launches a silverlight application
3. Click a button in the silverlight application

At this point the silverlight application makes a call to a wcf ria service to query the database that was just created.
However, every time the unit test is run a second time, I get the same error.
But the error goes away immediately if I click the button again for example.

Setting "Pooling=False" in my connection string did not resolve the issue in my case.

However, I was able to resolve the issue by restarting the web server which hosts the silverlight application and ria service after the database is created.

In my case, I just decided to use Cassini Dev Web Server v4 and run the tests on that web server instead of iis.

Windows 7 Ultimate x64
Visual Studio 2010 SP1
Entity Framework 4.1
WCF RIA Services SP1 for Silverlight 4
Silverlight 4
MSTest

Edit:
Entity Framework 4.1 Update 1 contains a bug fix to remove the need to specify ‘Persist Security Info=True’ in the connection string when using SQL authentication.
http://www.microsoft.com/download/en/details.aspx?id=26825

I am not (yet) sure if the bug is related and might resolve this issue as well.

0

精彩评论

暂无评论...
验证码 换一张
取 消