我正在尝试使用C#来使用SOAP服务(Agile PLM webservice),但SOAP服务使用“Datahandler”类型,这似乎是Java特有的语言(据我所知,使用Apache Axis库) )。
当我尝试使用wsdl.exe工具创建代理类时,由于没有此数据处理程序的类型,它会失败。任何人都可以建议如何(干净,有效地)使用这个SOAP服务,而无需手动编写代理类代码或手动处理C#中的SOAP消息?
答案 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中包含这些类型的定义来解决这些问题。