生成SOAP XML消息的最佳方法是什么?

3
什么是在C#中生成SOAP XML的最佳方法?如果可能的话,我更喜欢使用XML序列化。另外,我需要在SOAP头中添加一些自定义属性,所以不确定这是否会使事情复杂化。
还有一个注意事项:我正在通过TCP连接到运行在Linux服务器上的SOAP服务器,该SOAP服务器是用C++构建的。
此外,SOAP服务器不响应wsdl请求-它被完全锁定。我工作的地方安全性非常严格... :)

您是否有任何与该服务相关的WSDL?XSD?任何机器可使用的定义?您能够获取到其中之一吗?这些东西存在的目的是为了避免浪费数小时手动构建SOAP请求。 - Paul Turner
@编程英雄:没有 WSDL,有 XSD。我需要构建一个完整的SOAP消息,而不是Web服务生成的部分消息。希望这有所帮助! - code4life
3个回答

2
如果您有XSD,请看一下WSCF.blue本文应该会介绍背后的概念。您可能需要自己生成一些服务定义,但它应该比手动编写SOAP消息更容易构建WCF合同和客户端代理。

我绝对喜欢网站上描述的想法。现在不确定它是否能满足我的需求,但这是我想要采取的方向! - code4life

0

你想做什么?调用Web服务吗?

在Visual Studio中使用WCF和"添加服务引用",你就完成了!

不需要费力、手动构建任何SOAP消息 - 让WCF为您处理所有的烦琐事项,集中精力处理实际业务!

请参阅 msdn.microsoft.com/WCF 以获取一个很棒的介绍站点,包括许多文章和视频等内容。

是的 - 使用WCF确实可以使用XML序列化,但本机的WCF DataContractSerializer可能是更好的选择(在大多数情况下比XML序列化快约10%)。


@marc,我正在尝试调用一个基于Linux的SOAP服务器(C ++,TCP)。是否有类似于WCF的简便方法(天啊,我真的很想念WCF)? - code4life
你有可以调用的URL吗?尝试在末尾使用?WSDL进行调用-如果在浏览器窗口中显示了WSDL,则也可以将WCF服务连接到该URL-这真的不应该是一个问题。 - marc_s
不,SOAP服务器不支持WSDL查询。事实上,它完全不支持任何HTTP调用...只监听TCP端口。 - code4life

0

最好的方法是使用“添加服务引用”并指向服务的WSDL,无论是在磁盘上还是在网络上。然后通过生成的代理类调用服务。

请参阅“如何使用Web服务”。


@John,谢谢,但如果我需要将类序列化以便与SOAP服务器通信呢?抱歉我的问题原来没有表述清楚...! - code4life
@code4life:你有看我发的链接里的文章吗?那是你如何调用SOAP服务器。它不必是另一个WCF服务器。WCF具有互操作性。只需按照这些说明进行操作,看看会发生什么。 - John Saunders
@John,我更感兴趣的是如何生成SOAP消息。实际通信本身在客户端站点使用标准框架处理 - 我无法控制通信层。顺便说一下,我认为你让代理类通过wsdl生成是个好主意 - 但是soap服务器是基于tcp的,并不支持wsdl查询(例如,mysoapserver?wsdl)。 - code4life
@John,这不是一个Web服务 - 它是一个SOAP服务器,使用g++在Linux系统上构建而成。实际上,它根本不支持HTTP,只支持TCP。话虽如此,我确实有XSD文件 - 但没有WSDL文件。 - code4life
那么你就得猜了。没有WSDL,你不知道服务器使用的是RPC/Encoded还是Document/Literal,或者其他信息。 - John Saunders
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接