gpt4 book ai didi

c# - 解决方案无法构建,因为它无法从服务生成的类型转换为我的类型

转载 作者:行者123 更新时间:2023-11-30 17:47:31 24 4
gpt4 key购买 nike

我有一个构建良好的 WCF 服务项目,生成可访问的 WSDL,并且 svcutil.exe 未生成任何错误。

我有一个访问该 Web 服务的“服务管理器”项目,并且我已成功向其添加服务引用 ABCService。

第三个项目包含我需要来回传递的所有 POCO 对象 - 用 [DataContract] 和 [DataMember] 属性自由装饰。

当我尝试构建解决方案时,我看到 ABCService 的 Reference.cs 有这样的方法(为简洁起见,我用 (...) 代替了完整的命名空间):

    public (...).Thing SaveThing((...).Thing objThing) {
return base.Channel.SaveThing(objThing);
}

public (...).myCollectionOfThing0mj5ZrAW GetThings() {
return base.Channel.GetThings();
}

第一个返回单个事物的方法工作正常 - 但我对每个 MyCollection 方法都收到错误:

Error 16 Argument 1: cannot convert from '(...).MyCollection<Thing>' to '(...).myCollectionOfThing0mj5ZrAW'

我的收藏类装饰如你所料:

[CollectionDataContract]
public class MyCollection<T> : List<T> where T : BaseType
{
// ...
}

我不知道为什么它会生成时髦的“myCollectionOfThing0mj5ZrAW”名称,或者为什么从一个到另一个的转换失败

编辑 1:我试过使用

[CollectionDataContract(Name= "myCollection{0}", ItemName = "{0}")]

装饰我的集合类,我得到了同样的错误,但名称更新了:

Error 12 Argument 1: cannot convert from '(...).myCollection<(...).Thing>' to '(...).myCollectionThing'

编辑 2:

尽管选中了“Reuse types in referenced assemblies”,选择了“specified referenced assemblies”的单选按钮,并选中了我的 POCO assembly 旁边的框: Screenshot of reusing referenced assemblies

...仍在使用唯一的类名生成服务引用:

enter image description here

最佳答案

正如@vesan 和@RitchMelton 在评论中所建议的那样,类型似乎在客户端重新生成,您应该重用DataContract

如果您要添加服务引用,请通过选择radioreuse types in all references assemblies 在引用的程序集中重用该类型: enter image description here

另请注意,您可能需要将集合类型更改为 System.Collection.Generic.List 以防止将 List 更改为 Arrays/

如果您使用 SvcUtil 生成代理,则需要使用 /reference: 来重用 DataContract 程序集,同时生成引用,例如:

svcutil /reference:YourDLL.dll http://localhost/YourService?wsdl

有关 /refernceSvcUtil 的更多详细信息,请参阅:

ServiceModel Metadata Utility Tool (Svcutil.exe)

svcutil exlude/reuse refrenced assemblies

关于c# - 解决方案无法构建,因为它无法从服务生成的类型转换为我的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com