c# - "Reverse"WCF 服务(从客户端定义构建服务器)

标签 c# wcf web-services

.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/

相关文章:

java : Different ways for constructing an ArrayList

C# 将 int 存储在字节数组中

c# - "An unsecured or incorrectly secured fault was received from the other party"

c# - 应该定期调用 GC.Collect() 吗?

wcf - 如何从 WCF 服务获取 Debug/Trace.Writeline 输出

linux - 使用 Apache2 的 Linux 上的 WCF 服务

android - 在 Android 上托管网络服务

web-services - 从 play 2 调用多个 Web 服务

c# - 如何删除 HTML 标签中的所有属性

c# - 如何在 Windows Phone 7 中以编程方式检索下载的文件?