gpt4 book ai didi

c# - WCF 重用 SAME 库中的类型

转载 作者:行者123 更新时间:2023-12-02 21:36:11 25 4
gpt4 key购买 nike

我有以下项目结构:

  • Api 项目:包含 WCF svc 端点
  • ClientServer 库项目:包含服务器使用的类

我想要做的是将我的 ClientServer 库作为一个包罗万象的 API 包装器进行分发,客户端可以使用它来连接到 API 并提取信息。

由于 API 使用 ClientServer 库中定义的类型,我希望在 ClientServer 库中添加 ServiceReference 能够理解 API 返回类型实际上来自与引用相同的库.

我这样做的原因是,我只需要在一个地方定义从服务器发送到服务器的类,而且还提供一种“内置”机制,让客户端在不了解任何内容的情况下使用 API 如何连接以及没有附加依赖库(例如专用模型库)。

下面是我希望它如何工作的基本示例:

客户端服务器库:

public class Person {
public string Name { get; set; }
public int Age { get; set; }
.....
}

[ServiceContract]
public interface IPeopleService {

[OperationContract]
public Person[] Find(Person person);
}

API项目

public class PeopleService : ClientServerLibrary.IPeopleServer {      
public ClientServerLibrary.Person Find(ClientServerLibrary.Person person) {
// implementation for finding people based on the input person criteria.
}
}

鉴于上面的示例,我想将对 PeopleService 的引用添加到 ClientServer 库中这样使用我的库的人就可以做以下事情:

PeopleServiceClient people = new PeopleServiceClient() // Generated from the service references

// Here "Person" needs to be of type ClientServerLibrary.Person
Person person = people.Find(new Person() { Name = "Gary" });

但目前它正在重新生成所有类。我尝试过勾选和取消勾选“添加服务对话框”中的所有选项,但结果始终相同。

希望我已经很好地解释了我的意图?谢谢。

编辑:所有项目都使用 C# .NET v4,因此没有差异。

最佳答案

如上所述here ,WCF 代理生成器(通过 svcutil 或添加服务引用)不会在当前程序集中查找。

您必须将数据契约和服务接口(interface)分离到另一个库中,如下所示:

  • 服务.库
    • 人员类别
    • IPeopleService 接口(interface)
  • Service.Implementation,引用Service.Library
    • PeopleService 类
  • Service.Web,引用Service.LibraryService.Implementation
    • Web.config (WCF)
    • PeopleService.svc(端点)
  • ClientLibrary,引用Service.Library
    • PersonServiceClient 类(从 Service.Web 生成,使用 Service.Library.Person)

因此,在尊重您的标准“[没有]专用模型库”的同时,似乎没有简单的方法可以做到这一点。

如果您的唯一目标是能够提供包含所有消费者需求的一个 DLL 文件,请查看 ILMerge组合组件。

关于c# - WCF 重用 SAME 库中的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332133/

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