Soap服务方法类定义c#

Soap服务方法类定义c#,c#,xml,soap,xsd,C#,Xml,Soap,Xsd,我正在使用一个web服务,它有多种方法,其中一种方法需要xml作为输入 需要传递一个结构才能获得正确的响应 我已经在VisualStudio中添加了服务引用,并且可以看到它所生成的contract类中的方法 如何创建正确的类而不物理地获取.xsd文件并运行xsd.exe生成类?由于xml格式将来可能会发生变化,因此我需要再次运行xsd.exe,这是不好的 任何想法都很好 谢谢 因为将来xml格式可能会发生变化,所以我会 需要再次运行xsd.exe,这是不好的 您完全正确,因为生成服务契约定义的客

我正在使用一个web服务,它有多种方法,其中一种方法需要xml作为输入

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

我已经在VisualStudio中添加了服务引用,并且可以看到它所生成的contract类中的方法

如何创建正确的类而不物理地获取.xsd文件并运行xsd.exe生成类?由于xml格式将来可能会发生变化,因此我需要再次运行xsd.exe,这是不好的

任何想法都很好

谢谢

因为将来xml格式可能会发生变化,所以我会 需要再次运行xsd.exe,这是不好的

您完全正确,因为生成服务契约定义的客户端表示并不好。最好在服务程序集中引用实际的服务定义,然后在运行时使用构造通道。由于许多原因,这是一种远优于使用生成的服务引用的方法

在这种方法中,只有两件事可能会妨碍您:

  • 您没有访问服务二进制文件的权限。显然,您必须能够使用用于定义服务的实际类型
  • 服务二进制文件是可用的,但会被编译成一个“uber程序集”,其中包含各种你不关心、也不一定想从你的客户端应用程序中使用的东西 如果上述两个条件中的第一个为真,那么很抱歉,但是您必须使用xsd.exe求助于生成的客户端代理,并接受由此产生的所有惩罚。如果第二个条件为true,则可以要求服务所有者为您将服务定义代码提取到单独的程序集中,并且可以使用所述方法正常进行

    我手头有这个类,所以可以使用xml序列化程序…我只是创建 soapEnvelope,然后将生成的xml附加到 请求

    我假设该服务也使用WCF

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

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


    这里有一个示例:

    您有权访问web服务程序集吗?特别是包含服务定义的程序集?Web服务需要类还是文本?如果它只是文本,那么您所需要做的就是读取xml文件并作为文本发送。序列化的类将生成与文本xml文件相同的xml,因此反序列化xml文件(创建类)以再次序列化(创建文本)相同的文本是否有意义?您好,谢谢您的回复。看起来它们会很灵活,因为我们需要为它们提供表示,所以我手头有这个类,所以可以使用xml序列化程序。但是使用xml请求调用服务时,我是否只是创建一个soapEnvelope,然后将生成的xml附加到请求体中?