gpt4 book ai didi

WCF 常见类型未重用

转载 作者:行者123 更新时间:2023-12-03 14:40:20 24 4
gpt4 key购买 nike

提示:这个问题有很多重复,但没有一个解决方案适合我。

我拥有的是一个 Web 服务和一个客户端,它们都引用了一个共享程序集“DataModel”。我正在使用“添加服务引用...”对话框创建服务代理并选择“在所有引用的程序集中重用类型”,但它仍然创建新类型而不是重用我的类型。

  • 它曾经可以工作,但现在突然不再重用类型了
  • 在添加服务引用之前引用共享程序集不起作用
  • 重启VS2010没有帮助(我有所有更新)
  • 我尝试了一个简单的 POCO 类(只是一个包含整数属性的简单类),也没有运气
  • 删除并重新添加服务引用(或共享程序集引用)没有帮助
  • 仅在“在指定引用的程序集中重用类型”中选择共享程序集 - 不走运
  • svcutil.exe /reference产生相同的结果

  • 我不知何故不知所措。还有其他解决方案吗?

    编辑:我应该补充一点,我只是将我的项目重置为之前的提交,无论我使用哪个提交,仍然是同样的问题。而且我知道它适用于早期的提交!

    最佳答案

    当我在 VS2013 中添加服务引用时,我花了一整天的时间试图找出为什么我的共享 dll 中的类型没有被重用。事实证明,该服务有几个与序列化相关的问题。我有几个没有 EnumMember 属性的枚举。我解决问题的方法是尝试以下步骤:

  • 注释掉所有操作 (使用 OperationContract 属性修饰的方法)在我的 ServiceContract 中没有返回原子类型 .
  • 那么更新我的服务引用 在我的客户项目中。我意识到在我的客户项目中问题已经解决,我可以输入“[MyServiceReferenceName]”。并且我的类型没有出现在 [MyServiceReferenceName] 命名空间中。我通过在 XML 模式浏览​​器中打开生成的 XSD 文件来验证这一点,只是为了确定。
  • 一个一个,取消注释方法在步骤 1 中已注释。然后 每次更新您的服务引用以查看类型是否被重新使用 .
  • 一旦你查找导致服务引用无法重用类型的方法 , 转到每个类的输入或输出到方法的类型。检查 您希望序列化的所有类都用 [DataContract] 属性装饰。确保所有字段和属性都使用 [DataMember] 属性进行修饰。此外,确保枚举用 [DataContract] 修饰,并且每个枚举值都用 [EnumMember] 修饰.

  • 我希望这可以帮助其他正在经历这个令人沮丧的过程的人,这个问题不一定与共享 dll 有关。我的问题并不是使用添加或更新服务引用的真正问题。问题在于我的实体(模型)类没有使用适当的属性进行装饰,以通知 DataContractSerializer 序列化这些类型。似乎如果序列化的任何部分失败,添加服务引用会添加所有类型。

    关于WCF 常见类型未重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8286775/

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