c# - 通过 WCF 直接使用接口(interface)

标签 c# wcf mvvm prism async-await

我有一个实现给定接口(interface)的业务层,它有一个没有实现的 WCF 服务,只是将接口(interface)用作契约(Contract)。它路由到 BL 具体类:

BL层

public interface IClass1
{
    List<int> GetData();
}

public class Class1 : IClass1
{
    public List<int> GetData()
    {
        //...
    }
}

WCF服务
<%@ ServiceHost Language="C#" Debug="true" Service="BusinessLayer.Class1" %>
<%@ Assembly Name="BusinessLayer" %>

在我的客户端,我有一个 MVVM Prism 模块,其中包含一个实现 IClass1 的服务类。这个想法是,我可以构建包含服务模块(通过服务与数据库通信)或直接包含 BL 项目的解决方案(在这种情况下,它将直接与数据库通信)。

这似乎工作得很好,但我想在我的应用程序中启用异步等待。通常我会使用 <method>Async 调用 WCF 服务方法。调用,并让它传回任务。但是我在执行此操作时遇到错误,基本上是告诉我我的服务模块实现需要返回 Task<List<int>>使用等待时。

因为 BL、服务层和服务模块之间只有一个接口(interface),这意味着修改接口(interface)本身以返回任务,但我更希望 WCF 服务能够返回 List<int> (同步调用时)或 Task<List<int>>当通过 Async 方法调用时。

有没有办法在没有 WCF 服务的单独接口(interface)的情况下实现这一点?

最佳答案

WCF 服务器的“异步性”完全独立于其客户端代理。

所以,我认为改变界面是正确的做法。

  • IClass1.GetDataAsync将返回 Task<List<int>> .
  • WCF 服务实现将返回 Task<List<int>> , 并且可能是 async .
  • 重新创建您的 WCF 代理。这将创建一个 Task<List<int>> GetDataAsync()以及 List<int> GetData()在代理上。
  • 关于c# - 通过 WCF 直接使用接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20079276/

    相关文章:

    c# - 如果在调用方法时创建画笔,是否会处理画笔

    Silverlight PollingDuplex InnerChannel 出现 multipleMessagesPerPoll (serverPollTimeout) 故障

    c# - 如何防止 Microsoft Dynamics CRM 2011 中没有 ExecutionContext.CallerOrigin 的无限循环?

    c# - WCF——解决方案架构

    .net - 从 ViewModel 中的 Observable 集合中移除不会更新 View,但 Updates of Existing Items 会更新 View

    c# - 在库中使用 .Net Standard 1.4 并在应用程序中使用 .Net framework 4.6.1 时,无法加载文件 System.IO.FileSystem,Version=4.0.1.0

    c# - 在 ServiceStack 中进行属性级别授权的最佳方式?

    wpf - 使用 ICommand 的按钮不会被禁用?

    c# - ASCII编码和编码之间的区别

    c# - 如何在按钮单击时聚焦文本框