2011-10-04 66 views
8

我试图在应用程序中使用WCF 4.0服务。我从头建立,测试和部署了该服务。该服务在WCF测试客户端中工作,并可以在我构建的任何其他测试项目中使用。问题是这是一个特定的应用程序......唯一重要的因为它是我构建服务的原因。使用服务时出错:类型名称'AAA'在类型'YYY.YYY'中不存在

当我在引用服务之后构建应用程序时出现错误。错误是“类型名'AAA'不存在于类型'YYY.YYY''”中。

使用服务的项目名为'YYY.Web',位于'YYY'命名空间中。

该服务最初是在'YYY.ReportingService'命名空间中创建的。一旦出现这个问题,它就会被改为另一个命名空间。现在在'MMM'命名空间中。

我添加了一个using指令'YYY.Service1'。我也尝试别名使用指令(使用test = YYY.Service1)

为了确保某些东西不会与我的服务及其命名空间混淆,我使用单一方法构建了一项新服务。它接受一个字符串参数并返回“Hello”,并传递任何字符串。这个服务也可以在WCF测试客户端和我创建的几个测试项目中使用。此服务位于SimpleTestService名称空间BasicService类中,并具有一个名为GetGreeting的方法。命名是有意完成的,以避免任何可能的命名冲突。这项新服务仍然存在错误。

对此有何看法?谢谢!

回答

0

您是否拥有GAC中旧版本的服务DLL?你的应用程序可能引用了程序集的另一个版本,因此缺少类型。

+0

没有。第二个服务生成了同样的错误,除了在第一次修改后YYY.YYY类型中不存在的不同类型。 – user978467

0

我希望您在重命名服务中的命名空间后更新了服务引用。通常,当客户端代理未使用服务器的最新类型进行更新时,会出现此错误。您可以尝试更新服务参考。

+0

是的,参考文献已更新。我在引用该服务后第一次编译时发生此问题。第二个服务发生同样的问题。 – user978467

0

我意识到这是老问题,但我只是有这个问题,这个问题是一个命名空间冲突。

在我的情况下,AAA被命名为ServiceClient,并且产生了您遇到的同样的错误。一旦我删除命名空间冲突(改称为ConsoleClient),所有工作如预期。

19

这一个花了我一段时间。原来,"The type name 'AAA' does not exist in the type 'YYY.YYY' "是由YYY.YYY引起的 - 我的消费类共享名称及其包含的名称空间。

解决方案:将消费类重命名为不等于其名称空间全名的东西,即YYY.XXX

+1

谢谢,那也是我的问题! –

1

我有另一个问题。想象一下,两个项目具有不同的命名空间和下面的类

项目1

[DataContract(Namespace="SomeNamespace")] 
public class A 
{ 
    [DataMember] 
    public class B { get; set; } 
} 

项目2

// Here no DataContract attribute 
public class B 
{ 
    //... 
} 

在这种情况下,你会得到同样的错误如上。希望这会帮助某人。

+0

确切地说,如果一个契约引用了一个没有[DataContract]的非基元类型,它会抛出这个非常神秘和误导性的错误。 :P –

相关问题