Soap服务方法class定义c#
Soap service method class definition c#
我正在使用具有多种方法的 Web 服务,其中一种方法需要 xml 作为输入。
需要传递一个结构才能得到正确的响应。
我在 Visual studio 中添加了服务引用,并且可以在它生成的合同 class 中看到方法。
如何在不物理获取 .xsd 文件和 运行ning xsd.exe 生成 class 的情况下创建正确的 class?由于将来可能会更改 xml 格式,因此我需要再次 运行 和 xsd.exe,这并不好。
任何想法都会很棒
谢谢
As there could a change in the future to the xml format then I would
need to run the xsd.exe again which is not good.
您完全正确,因为生成服务合同定义的客户端表示并不好。更好的做法是在服务集合中引用实际的服务定义,然后在 运行 时间使用 ChannelFactory<T>
构建您的频道。出于多种原因,这比使用生成的服务引用要好得多。
只有两件事可能会阻碍您使用这种方法:
- 您无权访问服务二进制文件。显然,您必须能够使用用于定义服务的实际类型。
- 服务二进制文件可用,但被编译成一个 "uber-assembly",其中包含各种您不关心且不一定想从您的客户端应用程序中使用的东西。
如果上述两个条件中的第一个为真,那么抱歉,您必须求助于使用 xsd.exe 生成的客户端代理并接受由此产生的所有惩罚。如果第二个条件为真,您可以要求服务所有者为您将服务定义代码提取到单独的程序集中,然后您可以使用描述的方法照常进行。
i have the class at hand so can use xml serializer...do i just create
a soapEnvelope and then append the generated xml to the body of the
request?
我假设该服务也在使用 WCF?
使用像WCF 这样的框架的意义在于,您无需关心数据从客户端到服务的序列化、编码和传输。 WCF 会为您处理所有这一切。您需要做的就是使用服务定义创建 WCF 通道(通常这是一个接口,它将服务操作定义为接口上的方法)。
然后您可以针对通道实例调用这些方法,请求将被序列化为 XML,包装在 SOAP 包装器中,并通过 HTTP 传输到服务,请求在服务中被接收、解包、并反序列化,再次毫不费力。
这里有个例子:
我正在使用具有多种方法的 Web 服务,其中一种方法需要 xml 作为输入。
需要传递一个结构才能得到正确的响应。
我在 Visual studio 中添加了服务引用,并且可以在它生成的合同 class 中看到方法。
如何在不物理获取 .xsd 文件和 运行ning xsd.exe 生成 class 的情况下创建正确的 class?由于将来可能会更改 xml 格式,因此我需要再次 运行 和 xsd.exe,这并不好。
任何想法都会很棒
谢谢
As there could a change in the future to the xml format then I would need to run the xsd.exe again which is not good.
您完全正确,因为生成服务合同定义的客户端表示并不好。更好的做法是在服务集合中引用实际的服务定义,然后在 运行 时间使用 ChannelFactory<T>
构建您的频道。出于多种原因,这比使用生成的服务引用要好得多。
只有两件事可能会阻碍您使用这种方法:
- 您无权访问服务二进制文件。显然,您必须能够使用用于定义服务的实际类型。
- 服务二进制文件可用,但被编译成一个 "uber-assembly",其中包含各种您不关心且不一定想从您的客户端应用程序中使用的东西。
如果上述两个条件中的第一个为真,那么抱歉,您必须求助于使用 xsd.exe 生成的客户端代理并接受由此产生的所有惩罚。如果第二个条件为真,您可以要求服务所有者为您将服务定义代码提取到单独的程序集中,然后您可以使用描述的方法照常进行。
i have the class at hand so can use xml serializer...do i just create a soapEnvelope and then append the generated xml to the body of the request?
我假设该服务也在使用 WCF?
使用像WCF 这样的框架的意义在于,您无需关心数据从客户端到服务的序列化、编码和传输。 WCF 会为您处理所有这一切。您需要做的就是使用服务定义创建 WCF 通道(通常这是一个接口,它将服务操作定义为接口上的方法)。
然后您可以针对通道实例调用这些方法,请求将被序列化为 XML,包装在 SOAP 包装器中,并通过 HTTP 传输到服务,请求在服务中被接收、解包、并反序列化,再次毫不费力。
这里有个例子: