【发布时间】:2014-01-24 12:00:16
【问题描述】:
我的项目结构如下:
- 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,因此没有差异。
【问题讨论】:
-
Web 服务不必像 WCF 那样难。使用ServiceStack
-
@rmayer06 感谢您的链接,但不幸的是,使用不同的框架不是 atm 的选项。尤其是每个开发人员要花费 200 美元。无论如何,谢谢,感谢您的意见。
-
@rmayer06 另外,问题不是服务端所必需的,我正在寻找一种方法来创建一个重用现有类型而不是生成自己的类型的包装库。
-
ServiceStack 3 是免费的——您可能需要四处点击才能找到它。 v4 的许可证模型已更改(但 3 可以满足您在没有 WCF 自动生成垃圾的情况下所需的一切)。只是我的想法 - 我不使用 WCF 来解决您遇到的问题(还有很多很多)。
-
@rmayer06 仅供参考,API 实际上相当广泛并且已经在线,我的任务不是更改它的框架或从头开始重写它。我的任务是创建一个自包含的包装库,我的客户可以使用它来避免他们必须添加引用并自行配置它们。 ServiceStack 对于一个新的新建项目来说看起来很干净,但由于当前的架构,我无法切换。
标签: c# wcf web-services service-reference