Web引用共享类

| 我用Java编写了一些在JBoss 5.1上运行的SOAP Web服务。 他们两个共享一个类,AddressTO。 Web服务在我的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#客户端的Web引用是通过以下命令创建的
    wsdl.exe /parameters:CreateWebService.xml
xml文件包含我的Web服务的differend .wsdl文件的URL。 有人知道如何处理这个问题吗?     
已邀请:
呼叫
wsdl.exe
时使用
/sharetypes
选项:   / sharetypes       打开类型共享功能。此功能创建一个代码文件   与       相同类型之间共享的单个类型定义   不同       服务(名称空间,名称和线路签名必须相同)。       使用http:// URL作为命令行引用服务   参数       或为本地文件创建分解文档。 如果这些类完全匹配,则如果您在单个命令中为两个服务生成代码,则它们仅应生成一次。两种服务将使用相同的类,因此无需进行转换。 编辑: 如果XML名称空间不匹配(这是常见的情况),. NET将认为它们是不同的类型,这是正确的。您将必须修复Web服务以使类型完全相同(推荐),或者在两种生成的类型之间进行转换。这将导致大量无聊的属性分配代码,因此您可能需要考虑使用类似AutoMapper的方法来为您处理转换。 wsdl.exe应该生成部分类,因此,如果需要,可以定义不同类型之间的隐式转换:
public static implicit operator addressTO1(addressTO source)
{
    addressTO1 result = new addressTO1();
    // Assign properties, etc.
    return result;
}
我本人通常并不喜欢隐式转换,但是在这种情况下,可以这样做。     
我解决了! 我按照Thorarin的提示使用use3ѭ选项
sharetypes
。但是使用此选项并非绝对。首先,您需要在Java服务器的Webservice类中使用以下注释设置正确的名称空间(使用URI):
@WebService(targetNamespace=\"http://com/project/client/webservices/\")
public class WebServiceImplementation implements WebService{
      // ... your @WebMethod-methods
}
其次,您需要相应地修改ѭ8中的设置:需要这样添加Web服务的名称空间:
<wsdlParameters xmlns=\"http://microsoft.com/webReference/\"> 
    <!-- Defaultsettings -->
    <language>CS</language> 
    <sharetypes>true</sharetypes>      
    <namespace>com.project.client.webservices</namespace> 

    <!-- output --> 
    <out>soap/WebServices.cs</out> 

    <appSettingUrlKey>BaseUrl</appSettingUrlKey>         
    <appSettingBaseUrl>http://localhost:8080</appSettingBaseUrl> 

    <!-- web service locations --> 
    <documents> 
        <document>http://localhost:8080/Core?wsdl</document>       
        <document>http://localhost:8080/WebService0?wsdl</document>    
        <document>http://localhost:8080/WebService1?wsdl</document> 
    </documents> 
</wsdlParameters>
而已!叫
wsdl.exe /parameters:createWebService.xml
,您完成了。 谢谢你的帮助!     

要回复问题请先登录注册