Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net从多个web引用合并属性类_Vb.net_Web Services_Reference - Fatal编程技术网

VB.Net从多个web引用合并属性类

VB.Net从多个web引用合并属性类,vb.net,web-services,reference,Vb.net,Web Services,Reference,我有一个项目需要引用一些web服务,只要说我的引用是 service1Facade和service2Facade 它们都包含类名objectA 我必须从service1Facade加载objectA,并将其用作service2Facade中的参数。 但我有一个错误 “service1Facade.objectA类型的值无法转换为service2Facade.objectA” 如何转换这些对象 我尝试过但仍然无效的内容: 将所有引用分组到同一文件夹中,但.NET将其名称更改为 objectA和ob

我有一个项目需要引用一些web服务,只要说我的引用是
service1Facadeservice2Facade
它们都包含类名objectA
我必须从service1Facade加载objectA,并将其用作service2Facade中的参数。 但我有一个错误
“service1Facade.objectA类型的值无法转换为service2Facade.objectA”
如何转换这些对象

我尝试过但仍然无效的内容:

  • 将所有引用分组到同一文件夹中,但.NET将其名称更改为 objectAobjectA1
  • 我复制了objectA中属性的每个属性,但仍然不起作用

  • 负责根据您的WSDL规范生成代理类的功能不知道(也不应该知道)您的两个服务对
    objectA
    使用相同的底层类型,正如我所提到的,不能对此做出任何假设,因为web服务是要彼此解耦的(从消费者的角度)

    我想说,您最好的选择是拥有自己的代理类(比如说
    ServiceProxyDTO
    ),该类可以在服务1和服务2中使用

    public class ServiceProxyDTO
    {
      // Define properties from "objectA"
    
      public ServiceProxyDTO() { }
    
      public ServiceProxyDTO(service1Facade.ObjectA copyFrom)
      {
        // Copy state from "copyFrom"
      }
    
      public ServiceProxyDTO(service2Facade.ObjectA copyFrom)
      {
        // Copy state from "copyFrom"
      }
    
      public static implicit operator service1Facade.ObjectA(ServiceProxyDTO dto)
      {
        return new service1Facade.ObjectA() { /* Copy state back */ };
      }
    
      public static implicit operator service2Facade.ObjectA(ServiceProxyDTO dto)
      {
        return new service2Facade.ObjectA() { /* Copy state back */ };
      }
    
      public static implicit operator ServiceProxyDTO(service1Facade.ObjectA obj)
      {
        return new ServiceProxyDTO(obj);
      }
    
      public static implicit operator ServiceProxyDTO(service2Facade.ObjectA obj)
      {
        return new ServiceProxyDTO(obj);
      }
    }
    
    使用此代码,您可以实例化
    ServiceProxyDTO
    ,并将其作为参数传递给服务#1和#2(以及从这两个服务获取返回值)


    希望这有帮助。

    负责根据WSDL规范生成代理类的功能不知道(也不应该知道)您的两个服务对
    objectA
    使用相同的底层类型,正如我所提到的,不能对此做出任何假设,因为web服务意味着彼此分离(从消费者的角度)

    我想说,您最好的选择是拥有自己的代理类(比如说
    ServiceProxyDTO
    ),该类可以在服务1和服务2中使用

    public class ServiceProxyDTO
    {
      // Define properties from "objectA"
    
      public ServiceProxyDTO() { }
    
      public ServiceProxyDTO(service1Facade.ObjectA copyFrom)
      {
        // Copy state from "copyFrom"
      }
    
      public ServiceProxyDTO(service2Facade.ObjectA copyFrom)
      {
        // Copy state from "copyFrom"
      }
    
      public static implicit operator service1Facade.ObjectA(ServiceProxyDTO dto)
      {
        return new service1Facade.ObjectA() { /* Copy state back */ };
      }
    
      public static implicit operator service2Facade.ObjectA(ServiceProxyDTO dto)
      {
        return new service2Facade.ObjectA() { /* Copy state back */ };
      }
    
      public static implicit operator ServiceProxyDTO(service1Facade.ObjectA obj)
      {
        return new ServiceProxyDTO(obj);
      }
    
      public static implicit operator ServiceProxyDTO(service2Facade.ObjectA obj)
      {
        return new ServiceProxyDTO(obj);
      }
    }
    
    使用此代码,您可以实例化
    ServiceProxyDTO
    ,并将其作为参数传递给服务#1和#2(以及从这两个服务获取返回值)


    希望这有帮助。

    我尝试了您的解决方案,是的,服务想要接受我的参数,但是您还有其他选择吗,因为我的类中的大多数属性也有同样的问题。@user3073660您可以使用T4模板自动生成完整的对象图。很抱歉,这是我唯一可以重新编译的解决方案结束了,我感到很累。您可以手动编辑代理类,并将它们更改为使用相同的实际类。或者手动删除两个代理DTO,并使它们都从一个DTO类继承。@Stevendogart这一点很好,但在这种情况下,每当您更新服务引用时,您都有可能丢失所有更改。@volpav,Correct,我应该提到它的缺点:)我尝试了您的解决方案,是的,服务想要接受我的参数,但是您有其他选择吗,因为我的类中的大多数属性也有同样的问题。@user3073660您可以使用T4模板自动生成完整的对象图。很抱歉,这是我唯一能推荐的解决方案,我已经厌倦了。您可以手动编辑代理类,并将它们更改为使用相同的实际类。或者手动清除两个代理DTO,并使它们都从一个DTO类继承。@Stevendogart很好,但在这种情况下,每当更新服务引用时,您都有可能丢失所有更改。@volpav,正确,我应该提到,作为缺点:)是否在公共库中定义了所有三个项目都引用的
    objectA
    类?如果该类在所有三个项目都引用的公共库中定义,则在添加服务引用时,可以转到高级。。。选项并选择“引用的程序集中的重用类型”选项。@Stevendogart谢谢您的建议,我已经选择了“重用类型”,但是我没有看到我的类列在它的列表中,而且我让该服务通过web引用联机工作(我不知道为什么,但服务引用对我不起作用)
    objectA
    类是否在所有三个项目引用的公共库中定义?如果该类在所有三个项目引用的公共库中定义,则添加服务引用时,可以转到高级。。。选项并选择“引用的程序集中的重用类型”选项。@Stevendogart谢谢您的建议,我已经选择了“重用类型”,但是我没有看到我的类列在它的列表中,而且我让该服务通过web引用联机工作(我不知道为什么,但服务引用对我不起作用)