肥皂服务方法类定义c#

时间:2016-04-25 13:49:27

标签: c# xml soap xsd

我正在使用一种Web服务,它有各种方法,其中一种方法需要xml作为输入。

需要传递一个结构才能获得正确的响应。

我在Visual Studio中添加了服务引用,可以看到它生成的契约类中的方法。

如何在不实际获取.xsd文件并运行xsd.exe来生成类的情况下创建正确的类?由于将来可能会更改为xml格式,因此我需要再次运行xsd.exe,这是不好的。

任何想法都会很棒

由于

1 个答案:

答案 0 :(得分:1)

  

因为未来可能会改变xml格式,所以我愿意   需要再次运行xsd.exe,这是不好的。

完全正确的是,生成服务合同定义的客户端表示并不好。最好引用服务程序集中的实际服务定义,然后使用ChannelFactory<T>在运行时构建通道。由于许多原因,这比使用生成的服务引用要好得多。

使用这种方法只有两件事可能阻碍你:

  1. 您无法访问服务二进制文件。很明显,您必须能够使用用于定义服务的实际类型。
  2. 服务二进制文件可用,但编译成&#34; uber-assembly&#34;包含您不关心的各种内容,并且不一定要从您的客户端应用中消费。
  3. 如果上述两个条件中的第一个条件为真,那么抱歉,您必须使用xsd.exe求助于生成的客户端代理,并接受所有这些条件。如果第二个条件为真,您可以要求服务所有者将服务定义代码解压缩到一个单独的程序集中,您可以使用所述方法正常进行。

      

    我有手头的课程所以可以使用xml序列化程序...我只是创建   soapEnvelope然后将生成的xml附加到主体上   请求?

    我假设服务也在使用WCF?

    使用像WCF这样的框架的关键在于,您不需要关心从客户端到服务的数据的序列化,编码和传输。 WCF会为您解决所有这些问题。您需要做的就是使用服务定义创建WCF通道(通常这是一个将服务操作定义为接口上的方法的接口)。

    然后,您可以针对通道实例调用这些方法,并且请求将被序列化为XML,包装在SOAP包装器中,并通过HTTP传输到服务,其中请求被接收,解包和反序列化,再次没有任何请求努力。

    这里有一个例子:https://stackoverflow.com/a/8869809/569662