我正在尝试使用 C# 使用 SOAP 服务(Agile PLM webservice),但 SOAP 服务使用“Datahandler”类型,这似乎是 Java 特有的语言(据我所知,使用 Apache Axis 库)。
当我尝试使用 wsdl.exe 工具创建代理类时,由于没有此数据处理程序的类型而失败。任何人都可以建议如何(干净、有效地)使用此 SOAP 服务,而无需手动编写代理类或手动处理 C# 中的 SOAP 消息?
我正在尝试使用 C# 使用 SOAP 服务(Agile PLM webservice),但 SOAP 服务使用“Datahandler”类型,这似乎是 Java 特有的语言(据我所知,使用 Apache Axis 库)。
当我尝试使用 wsdl.exe 工具创建代理类时,由于没有此数据处理程序的类型而失败。任何人都可以建议如何(干净、有效地)使用此 SOAP 服务,而无需手动编写代理类或手动处理 C# 中的 SOAP 消息?
您只能通过 WebServices 使用由可序列化的基本类型组成的类...否则客户端无法知道这种数据的含义。我认为您的数据处理程序包含的不仅仅是原始数据结构......
您可以将数据处理程序中的数据包装在可服务的“视图”类中,例如:
class datahandlerView
{
string a;
string b;
List<MyOtherView> list;
}
如果列表和类型或多或少是基本的 Java 类型,您通常可以通过 SOAP 和 JaxWS 发送它。它们必须可序列化为 XML。不要直接在您的 WS 端点上公开实体(例如来自 JPA 或 Hibernate) - 至少如果您必须 - 确保所有实体关联都被标记为急切(否则 WS 调用将在运行时失败)。希望有帮助。
首先,除非您一直使用 .NET 2.0,否则您不应该使用 WSDL.EXE。您应该使用 SVCUTIL.EXE 或“添加服务参考”。
无论如何,这无助于您使用这个损坏的 Web 服务。
我看到的一些 Apache 服务版本有效地假设消费者也在运行 Java,事实上,它已经知道这些数据类型。这只是完全损坏,无法修复,除非由损坏的 Web 服务的供应商提供。
我的理解是,Apache 的更高版本通过在 WSDL 中包含这些类型的定义来解决这些问题。