我用java编写了一些soap web服务,运行在jboss 5.1上。
他们两个共享一个类,addressto。webservices正在applycationserver上正确部署,在我尝试在c客户机中使用类addressto之前,一切都很顺利。客户机应用程序中有两种类型:addressto和addressto1。这是一个问题,因为这会导致如下错误:
Fehler 1 Eine implizite Konvertierung vom Typ
"acsysteme.i4workspace.client.webservices.addressTO1[]" in
"acsysteme.i4workspace.client.webservices.addressTO[]" ist nicht möglich.
[...]
这意味着不可能隐式强制转换到类型。
addressto类似于一个核心类,可以被其他web服务使用。
c-客户机的webreferences由命令创建
wsdl.exe /parameters:CreateWebService.xml
XML文件包含指向我的WebServices的不同.wsdl文件的URL。
有人知道怎么处理这个问题吗?
最佳答案
调用/sharetypes
时使用wsdl.exe
选项:
/股份类型
打开类型共享功能。此功能创建一个代码文件
具有
同一类型的单一类型定义
不同的
服务(命名空间、名称和连线签名必须相同)。
使用http://url作为命令行引用服务
参数
或者为本地文件创建discomap文档。
如果类完全匹配,那么如果在一个命令中为两个服务生成代码,则只应生成一次。两个服务将使用同一个类,因此不需要转换。
编辑:
如果XML名称空间不匹配(这是常见的情况),.NET会将它们视为不同的类型,这是正确的。您要么必须修复web服务,使类型完全相同(推荐),要么在两个生成的类型之间进行转换。这将导致许多枯燥的属性分配代码,因此您可能需要考虑使用AutoMapper之类的代码来为您处理转换。
wsdl.exe应该生成partial classes,因此如果需要,可以在不同类型之间定义隐式conversions:
public static implicit operator addressTO1(addressTO source)
{
addressTO1 result = new addressTO1();
// Assign properties, etc.
return result;
}
我自己通常不太喜欢隐式转换,但在这种情况下,这是有道理的。