如何使用在C#中使用Datahandler类型的基于Java的SOAP服务?

时间:2011-11-04 17:15:07

标签: c# soap datahandler

我正在尝试使用C#来使用SOAP服务(Agile PLM webservice),但SOAP服务使用“Datahandler”类型,这似乎是Java特有的语言(据我所知,使用Apache Axis库) )。

当我尝试使用wsdl.exe工具创建代理类时,由于没有此数据处理程序的类型,它会失败。任何人都可以建议如何(干净,有效地)使用这个SOAP服务,而无需手动编写代理类代码或手动处理C#中的SOAP消息?

2 个答案:

答案 0 :(得分:2)

您只能通过WebServices使用由可序列化基本类型组成的类...否则,客户端无法知道这类数据的含义。 我认为您的数据处理程序不仅仅包含原始数据结构......

您可以将数据处理程序中的数据包装在可服务的“视图”类中,如:

class datahandlerView
{
    string a;
    string b;
    List<MyOtherView> list;
}

如果列表和类型或多或少是基本的Java类型,通常可以通过SOAP和JaxWS发送它。它们必须可序列化为XML。 不要直接在WS端点上公开实体(如JPA或Hibernate) - 至少如果必须 - 确保所有实体关联都标记为渴望(否则WS调用将在运行时失败)。 希望有所帮助。

答案 1 :(得分:1)

首先,除非您使用.NET 2.0,否则您不应该使用WSDL.EXE。您应该使用SVCUTIL.EXE或“添加服务引用”。

在任何情况下,这都不会帮助您使用这个损坏的Web服务。

我看到的某些版本的Apache服务有效地假设消费者也在运行Java,事实上,它已经知道这些数据类型。除了被破坏的Web服务的供应商之外,这很简单,并且无法修复。

我的理解是,后来的Apache版本通过在WSDL中包含这些类型的定义来解决这些问题。