向枚举添加标志后:Wcf错误:错误5自定义工具错误:无法为服务引用生成代码';MyService';
在我的WCF服务上,我只需将枚举更改为:向枚举添加标志后:Wcf错误:错误5自定义工具错误:无法为服务引用生成代码';MyService';,wcf,enums,datacontract,flags,Wcf,Enums,Datacontract,Flags,在我的WCF服务上,我只需将枚举更改为: /// <summary> /// The DocumentState enum. /// </summary> [DataContract] public enum DocumentState { /// <summary> /// Undefined. /// </summary> [EnumMember] Undefined, /// <
/// <summary>
/// The DocumentState enum.
/// </summary>
[DataContract]
public enum DocumentState
{
/// <summary>
/// Undefined.
/// </summary>
[EnumMember]
Undefined,
/// <summary>
/// OK.
/// </summary>
[EnumMember]
Ok
}
//
///DocumentState枚举。
///
[数据合同]
公共枚举文档状态
{
///
///未定义。
///
[委员]
未定义,
///
///嗯。
///
[委员]
好啊
}
致:
//
///DocumentState枚举。
///
[数据合同]
[旗帜]
公共枚举文档状态
{
///
///未定义。
///
[委员]
未定义=0,
///
///嗯。
///
[委员]
Ok=1
}
在客户端,我更新了WCF引用,没有任何问题,但在重建之后,我得到:
错误5自定义工具错误:无法为服务引用“MyService”生成代码。有关详细信息,请查看其他错误和警告消息
此标志枚举有什么问题
更新:
好的。。在战争中我发现了这一点,但这并没有真正帮助我: 警告1自定义工具警告:无法导入wsdl:portType 详细信息:运行WSDL导入扩展时引发异常:System.ServiceModel.Description.DataContractSerializerMessageCompactImporter 错误:引用类型“TestSolution.Test.Entities.Documents.Document,TestSolution.Test.Entities,版本=1.1.78.7965,区域性=中性,PublicKeyToken=7ad0fddf5c57b9b3',命名空间中的数据协定名称为“文档”http://schemas.datacontract.org/2004/07/TestSolution.Test.Entities.Documents'无法使用,因为它与导入的DataContract不匹配。需要从引用的类型中排除此类型 XPath到错误源://wsdl:definitions[@targetNamespace='1]http://tempuri.org/']/wsdl:portType[@name='IDocumentService']c:\TFS1\TestSolution-Test\Test\Test.Core\Service References\DocumentService\Reference.svcmap 1 1 Test.Core 警告2自定义工具警告:无法导入wsdl:绑定 详细信息:导入wsdl:binding依赖的wsdl:portType时出错 到wsdl:portType://wsdl:definitions[@targetNamespace=”的XPathhttp://tempuri.org/']/wsdl:portType[@name='IDocumentService'] XPath到错误源://wsdl:definitions[@targetNamespace='1]http://tempuri.org/']/wsdl:binding[@name='NetTcpEndpoint']c:\TFS1\TestSolution-Test\Test\Test.Core\Service References\DocumentService\Reference.svcmap 1 Test.Core 警告3自定义工具警告:无法导入wsdl:端口 详细信息:导入wsdl:端口所依赖的wsdl:绑定时出错。 XPath到wsdl:binding://wsdl:definitions[@targetNamespace='1]http://tempuri.org/']/wsdl:binding[@name='NetTcpEndpoint'] XPath到错误源://wsdl:definitions[@targetNamespace='1]http://tempuri.org/']/wsdl:service[@name='DocumentService']/wsdl:port[@name='nettcendpoint']c:\TFS1\TestSolution-Test\Test\Test.Core\service References\DocumentService\Reference.svcmap 1 Test.Core
错误4自定义工具错误:无法为服务引用“DocumentService”生成代码。有关详细信息,请查看其他错误和警告消息。c:\TFS1\TestSolution-Test\Test\Test.Core\Service References\DocumentService\Reference.svcmap 1 1 Test.Core添加
标志
属性时,更改了枚举的存储方式,并使该类型的变量能够容纳多个值。这解释了WCF如何处理此问题的详细信息。除非您真的打算将该枚举函数用作标志字段,否则我将去掉它,因为它不需要使枚举的含义复杂化。仍然没有看到问题:(好的..在warrnings中我发现了这一点,但这并没有真正帮助我:我认为简单的解决方案是像以前一样删除Flag
属性和Enum。通过添加它,您更改了Enum的数据类型,这会导致您的客户端发生中断。在这种情况下,引入一个新的Enum DocStateFlags
,并更改您的服务器和客户端代码来使用新的枚举。没有简单的方法可以在不重新写入代码的情况下将当前枚举转换为标志
类型。并且刚刚在项目中发现一个新警告:警告1自定义工具警告:已添加具有相同键的项。C:\Test\Service References\DocumentService\Reference.svcmap 1 1 Test.Co重新更新:为您提供一些附加信息:-我正在使用net.tcp绑定-枚举在wcf服务和客户端上已经使用了至少50个位置(不带flags属性)-当我创建一个同名但名称末尾有2的新枚举时,一切都很好!关于“wsdl:portType”的警告到底意味着什么/“wsdl:绑定”/“wsdl:端口”????
/// <summary>
/// The DocumentState enum.
/// </summary>
[DataContract]
[Flags]
public enum DocumentState
{
/// <summary>
/// Undefined.
/// </summary>
[EnumMember]
Undefined = 0,
/// <summary>
/// OK.
/// </summary>
[EnumMember]
Ok = 1
}