【问题标题】:Add Service Reference Option for WCF Not Adding Everything to Proxy Classes为 WCF 添加服务引用选项不将所有内容添加到代理类
【发布时间】:2013-11-11 15:03:00
【问题描述】:

所以我有一个我继承的项目,它有一个 WCF 服务参考和相应的Reference.cs 生成的代理类。在现有代理类中,我可以看到enum 定义:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="MyRecord.ColorAction", Namespace="http://schemas.datacontract.org/2004/07/DocumentsDataAccess.DataClasses")]
public enum ColorAction : int {

    [System.Runtime.Serialization.EnumMemberAttribute()]
    NONE = 0,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    GREEN = 1,

    [System.Runtime.Serialization.EnumMemberAttribute()]
    RED = 2,

}

下面是对应的WCF代码:

[DataContract]
public enum ColorAction
{
    [EnumMember]
    NONE = 0,
    [EnumMember]
    GREEN = 1,
    [EnumMember]
    RED = 2,
}

我可以通过在浏览器中查看wsdl 来验证这是否已公开,我可以看到列出的enum 类型。

但是,当我“刷新”或“添加服务参考”(通过删除和重新添加作为新参考)时,enum 以及许多其他方法和枚举都丢失了时间>。代理类的下载和创建是成功的,所以这不是错误问题。

我已尝试调整Add Service Reference 对话框中的所有“高级”设置,但似乎没有任何区别。最终结果是,由于现有代码期望能够调用和使用 enums 以及其他缺少的代码,因此在刷新或重新添加服务引用后代码将无法编译。

我已经尝试取消选中Reuse types in all referenced assemblies,但这并没有改变结果。

我想知道,创建我正在查看的代理类的原始人是否使用Add Service Reference 向导并直接使用SvcUtil.exe 代替?我自己之前使用过它,但想知道我需要使用什么来生成 WCF 服务所公开的所有内容?要获得该服务必须公开提供的所有内容,我需要进行哪些切换? (仅供参考,我的目标是 .NET 4.0)。

【问题讨论】:

  • 您的枚举成员是否标有 EnumMemberAttribute?您的客户是什么类型的应用程序?
  • 查看我更新的代码。 [EnumMember] 属性存在。

标签: c# wcf visual-studio svcutil.exe


【解决方案1】:

您能否发布 Enum 类的托管 WCF 服务代码?

Add Service Reference 可能无法创建完整的参考文件SO-SvcUtil.exe vs Add Reference。有可能使用了SvcUtil.exe。尝试一下,看看是否可以构建更好的代理。

【讨论】:

  • 枚举类是否用于 WCF 端的任何方法中?它必须是合同的一部分 - 请参阅here
  • 枚举在 VS2010 中使用 Add Service Reference 拉入,但在 VS2012 中没有。知道为什么 IDE 更改会创建不同的代理,即使使用相同的选项来创建它们?
  • @atconway - 你能澄清一下你的意思是“在 VS2010 中而不是在 VS2012 中”吗?你继承的项目有没有可能针对早期的 FW,比如 3.5?当你取消选中“在所有引用中重用类型组件”然后您是否选择了您需要的相应组件?
  • 引入我的意思是“在代理类中创建”。因此,在 VS2010 中,枚举是在代理类中创建的,但不是在 VS2012 中的代理类中创建的,使用 Add Service Reference 对话框中的 exact 相同选项。取消选择“重用...”后,我没有检查任何版本的 VS.NET 中的任何程序集
  • 尝试手动选择组件。您能否比较原始版本和刷新版本之间的 reference.cs 文件。有什么不同吗?命名空间是否完好无损?
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
相关资源
最近更新 更多