服务器和客户端之间共享的库-无法隐式转换类型

我创建了3个项目:类库(以下两个引用),Web服务和客户端应用程序。在客户端应用程序中,尝试从Web服务获取“共享类型”的对象时,出现错误Cannot implicitly convert type 'ClientProject.ServiceProject.AB' to 'Classlibrary.AB'。我以为这是我使用DataContract时遇到的问题,但是我尝试了几种方法,但结果仍然相同。您能给我一些指示,我该怎么做错了?

Class库AB类:

using System;
using System.Runtime.Serialization;

namespace Classlibrary
{
    [Serializable]
    [DataContract(Name = "AB",Namespace = "Classlibrary")]
    public class AB
    {
        [DataMember(Name = "a")]
        private int a;
        [DataMember(Name = "b")]
        private byte[] b;
        <some_more_methods_here>
    }
}

Web服务方法:

using Classlibrary;
[...]
[WebMethod]
public AB calledMethod(byte[] x)
{
    int a = [...]
    byte[] b = [...]
    AB ab = new AB(a,b);    
    return ab;
}

失败的客户端代码:

using Classlibrary;
[...]
byte[] x = [...]
var serviceProjectsoapClient = new ServiceProject.ServiceProjectsoapClient();
AB ab = new AB();
ab = serviceProjectsoapClient.calledMethod(x);

编辑:

由于我是使用共享项目还是使用类库,对此有一些疑问。

我尝试了以下操作:1)创建“类库”项目; 2)建造它; 3)在服务器和客户端应用程序中都引用了* .dll(都指向相同位置的完全相同的* .dll文件,当我检查两个项目中的类型时,它们在元数据中都显示完全相同)。

wangshuaiws0 回答:服务器和客户端之间共享的库-无法隐式转换类型

我发现了为什么会这样:我将Service Reference添加到Client应用程序项目中,以与Web服务进行通信。在这种情况下,此类引用的工作方式与任何其他* .dll引用完全相同。问题是尽管Service方法返回了ClassLibrary.AB对象,但编译器并未考虑名称空间,并期望使用AB对象,这是因为对Web服务的引用预期为ServiceProject.AB,最后在CientProject中使用默认名称空间-ClientProject.ServiceProject.AB

本文链接:https://www.f2er.com/2988593.html

大家都在问