gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:59:36 25 4
gpt4 key购买 nike

我有一个实现给定接口(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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com