首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF服务方法同步/异步

WCF服务方法同步/异步
EN

Stack Overflow用户
提问于 2010-05-25 19:28:41
回答 2查看 635关注 0票数 0

我在使用Silverlight 3调用WCF服务方法时遇到了问题。

代码语言:javascript
复制
private bool usr_OK = false;

clientService.CheckUserMailAsync(this.mailTF.Text);


if (usr_OK == true)
{ isValidationOK = true; }
else { isValidationOK = false; MessageBox.Show("User already exists.", "User registered succes!", MessageBoxButton.OK); }

CheckUserMail应更改usr_OK参数。但是,它在其他线程中运行,并且在阻塞开始之前不会更改usr_OK参数。我已经尝试了thread.join,但应用程序冻结了,我不知道还能做什么。请帮助WCF我可以等待me...how方法返回参数usr_OK吗?

EN

回答 2

Stack Overflow用户

发布于 2010-05-25 20:31:28

对你的问题最直接的回答是: WCF不要阻塞调用。它们使调用变得困难是有原因的。很有可能,如果你尝试过,也没有办法阻止...但别这么做。

详细说明: Silverlight的操作模式是异步。当你在Silverlight中开发时,这是你必须习惯的东西。它们会让你很难阻止任何东西。

在我看来,这是一件好事。当您阻塞WCF服务调用之类的结果时,您最终阻塞的是用户线程。对于开发人员来说,这确实需要一些习惯,但再说一次...习惯它吧。

假设你有想要的代码,就像这样(同步):

代码语言:javascript
复制
var theResult = clientService.DoSomething(foo);
Process(theResult);

重写的方法是这样的(异步):

代码语言:javascript
复制
clientService.DoSomethingCompleted += (sender, args) => Process(args.Result);
clientService.DoSomethingAsync(foo);

更进一步,我喜欢将我的服务抽象为接口(这样我就可以在测试时替换它们,或者在开发时以独立模式运行)。我以此为契机创建了一个如下所示的界面:

代码语言:javascript
复制
public interface IMyService
{
    void DoSomething(string input, Action<string> whenComplete);
}

我像上面的异步代码一样实现服务,然后当我调用它时,它是非常干净和简单的:

代码语言:javascript
复制
myService.DoSomething(foo, Process);

您会发现系统的很多部分都会变成异步代码库,但这可能需要您重新调整您的期望。

票数 2
EN

Stack Overflow用户

发布于 2010-05-25 19:39:15

在CheckUserMailCompletedEvent的事件处理程序中绑定检查usr_OK变量的代码

代码语言:javascript
复制
clientService.CheckUserMailCompleted += new EventHandler<CheckUserMailCompletedEventArgs> (clientService_CheckUserMailCompleted);
clientService.CheckUserMailAsync(this.mailTF.Text);


void clientService_CheckUserMailCompleted(object sender, CheckUserMailCompletedEventArgs e) {
    if (usr_OK == true) {
        isValidationOK = true; 
    }
    else {
        isValidationOK = false; 
        MessageBox.Show("User already exists.", "User registered success!", MessageBoxButton.OK);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2904102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档