【问题标题】:Auto generate C# interfaces (with function prototypes) from XSD?从 XSD 自动生成 C# 接口(带有函数原型)?
【发布时间】:2011-05-24 16:12:02
【问题描述】:

我知道如何以 XSD 格式定义类/数据结构并自动生成等效的 C# 类(使用 xsd.exe 或更详细的 xsd2code.exe)。

我想用利用上述数据结构的方法来定义接口类。目标是使用强类型类和接口创建一些进程到进程(在同一台机器上)的通信协议。

我脑子里有一个大沙拉,结合了 XSD、WSDL、SOAP、REST 等等。我应该使用哪种技术?

10 倍。

【问题讨论】:

    标签: c# interface methods xsd code-generation


    【解决方案1】:

    XSD 用于定义数据类型,而不是接口或协议。我会去混合WSDLXSD。我的意思是,您创建一个定义接口和方法的 WSDL,然后将这些方法的参数绑定到 XSD 中定义的类型,无论是在 WSDL 内部还是外部。

    Samples here。如您所见,logbus-management.wsdl 不仅包含自己的 XSD,而且还强烈引用来自 logbus-filters.xsdfilter 命名空间。

    从该 WSDL 中,您可以使用 wsdl /serverInterfaces logbus-management.wsdl logbus-filters.xsd 并将 C# interfaces 和所有数据类型都放入一个 C# 源代码文件中。如果您还通过 Visual Studio 生成代理,则可以获得 SOAP。您可能需要一个 Web 服务(即 ASP.NET,可能在 serverless mode 中),但我不确定您是否可以使用远程处理(应该)运行 SOAP 或使用 WCF。

    希望我能有所帮助。

    跟进

    您现在需要使用Remoting 让进程通信。 Here我找到了一个教程。您的骨架代码应如下所示:

    using System;
     
    namespace addsubs
    {
        /// <summary>
        /// Summary description for Class1.
        /// </summary>
        public class addsubs : MarshalByRefObject, IMultiplier //what you compiled from WSDL
        {
            public int product;
            public int multiply(int a, int b)
            {
                product = a * b;
                return product;
            }
        }
    }
    

    两个应用程序必须共享IMultiplier 接口(或其他),然后,当您获得对骨架对象的引用时(通过本地.NET 应该为您创建的代理),将其转换为IMultiplier

    其他用户注意

    正如我所说,我没有直接使用 .NET Remoting 的经验。 如果我刚才说的有误,请不要对我的回答投反对票。相反,请帮助我们的朋友实现他的目标。

    谢谢

    【讨论】:

    • 感谢您的快速回复!
    • 哎呀..(不要在 cmets 中按 ENTER)这是我的基本想法 - 在 XSD 中定义数据结构和在 WSDL 中定义接口(我没有意识到我可以在里面定义数据结构WSDL 也是如此)。让我有些困惑的是,每个生成的接口方法都附加了 [WebMethod] 属性。我不打算将它与 Web 服务一起使用(至少在不久的将来我不会想到)——我需要它来在同一台机器上的进程之间进行通信。这对我来说是很模糊的——我可以使用 WSDL 生成的类作为常规 C# 接口吗?
    • WebServiceAttribute 启用通过 SOAP/WSDL(Web 服务)调用的方法,但不限制。作为一个接口,它的方法可以从其他代码以编程方式调用。为了具体使用WebServiceBAttribute,您必须还继承自WebService 类,而不仅仅是实现接口。删除该属性没有任何效果。你现在要做的是让进程相互通信,就像使用 CORBA(我有 Java 经验)一样。我建议你远程处理,但我没有经验
    • 嗯,你帮了大忙。谢谢!
    【解决方案2】:

    这是我最终使用的解决方案:http://www.codeproject.com/KB/codegen/XSLCodeGen.aspx

    【讨论】:

      猜你喜欢
      • 2013-11-16
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多