.Net 提供了一些很棒的机制来定义远程服务,然后“自动”创建一个客户端来连接到它,从而隐藏了许多令人讨厌的布线和大惊小怪。但是有没有类似的路线可以走另一条路呢?
我最近的工作任务是创建一系列服务,这些服务将在身份验证和搜索查询等方面相互通信。一个要求是我们的核心服务能够调用其他“服务节点”,这些“服务节点”可能是内部创建的,也可能不是内部创建的,但都需要实现一个通用接口(interface)。我可以构建此服务的引用实现,从中创建 WSDL,然后自动生成客户端,不会出现问题。然而,似乎定义服务的唯一方法基本上是让某人指向我创建的 WSDL 并说“实现看起来像那样的东西”。鉴于 WSDL 很少被设计为供人类阅读,这条路线似乎没有吸引力。
那么有没有一种我不知道的方法可以从 WSDL 或类似的描述符生成服务接口(interface)?在这里主要查看 .NET 3.5,使用 C# 和 WCF。谢谢!
最佳答案
如果您有一个 WSDL 来描述您的客户想要调用的方法,加上一个 XSD(XML 架构)来描述它希望发送和接收的数据元素,那么您就拥有了从中创建服务所需的一切。这被称为构建 WCF 服务的“契约(Contract)优先”方法,并且相当流行,尤其是在具有互操作性要求的环境中(例如 Java 客户端和 .NET 服务,反之亦然)。
使用svcutil.exe
,您可以生成一个服务接口(interface)类——您的服务描述。这将包含服务契约(Contract)、操作契约(Contract)和数据契约(Contract)。
svcutil yourMethods.wsdl yourDataSchema.xsd /language:C# /out:YourServiceInterface.cs
(or /language:VB, if you prefer VB.NET)
这将创建一个 YourServiceInterface.cs
(或 YourServiceInterface.vb
)文件,这是您的服务器代码的基础。
由此,您可以创建一个实际的服务实现 - 执行实际工作的服务类。
最后但同样重要的是,您需要决定如何托管您的服务 - 在 IIS 中或在控制台应用程序或 NT 服务或其他一些方式中自行托管。
马克
关于c# - "Reverse"WCF 服务(从客户端定义构建服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527057/