无法将类型void隐式转换为System.Threading.Tasks.Task <bool> </bool>

时间:2013-11-08 21:50:30

标签: c# multithreading wcf asynchronous task

我有一个包含以下方法的WCF服务。服务中的所有方法都是异步的,编译得很好。

public async Task<Boolean> ValidateRegistrationAsync(String strUserName)
{
    try
    {
        using (YeagerTechEntities DbContext = new YeagerTechEntities())
        {
            DbContext.Configuration.ProxyCreationEnabled = false;
            DbContext.Database.Connection.Open();

            var reg = await DbContext.aspnet_Users.FirstOrDefaultAsync(f => f.UserName == strUserName);

            if (reg != null)
                return true;
            else
                return false;
        }
    }
    catch (Exception)
    {
        throw;
    }
}

我的客户端应用程序设置为使用“允许生成异步操作”复选框访问WCF服务,并且它生成了代理就好了。

尝试使用以下代码从我的客户端调用此WCF服务方法时,我收到上述主题错误。请注意,我知道错误消息的含义,但这是我第一次尝试从客户端调用WCF服务中的异步任务。

Task<Boolean> blnMbrShip = db.ValidateRegistrationAsync(FormsAuthentication.Decrypt(cn.Value).Name);

如何正确调用该方法以便设计时编译错误消失?

1 个答案:

答案 0 :(得分:1)

WCF代理是旧的;尝试使用较新的(VS2012 / VS2013)代理生成器重新创建代理。

具体来说,它正在生成Event-based Asynchronous Pattern个端点,您需要Task-based Asynchronous Pattern个端点。

如果这是针对Silverlight客户端,则自动生成的代理将拒绝创建TAP方法。在这种情况下,你需要编写自己的包装器(pretty easy,只是相当繁琐)。