【发布时间】:2012-11-15 16:36:36
【问题描述】:
我有一个 WCF 服务,方法如下:
[OperationContract]
TernaryWebServiceResponse<long> ModifyObservations(...);
响应对象如下:
[DataContract]
public class TernaryWebServiceResponse<T>
{
[DataMember]
public TernaryProcessingResultStatus ProcessingSuccessStatus { get; set; }
[DataMember]
public Dictionary<T, bool> ProcessingSuccessDetails { get; set; }
}
此类在共享程序集中定义,并且 WCF 引用配置为重用它。
但是当我生成代理时,我会得到这样的结果:
自定义工具警告:无法导入 wsdl:portType 详细信息:异常 在运行 WSDL 导入扩展时抛出: System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:引用类型“TernaryWebServiceResponse”1,常规, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 带数据 命名空间中的合同名称“TernaryWebServiceResponseOflong” 'http://schemas.datacontract.org/2004/Genaral.SoapCommunication' 无法使用,因为它与导入的 DataContract 不匹配。需要 从引用类型中排除此类型。
谁能解释一下,这里到底是什么问题?我知道泛型可以在 WCF 合同中使用,只要它们得到解决,例如不是MyObj<T>,而是MyObj<long>。那么这门课有什么问题呢?是不是在类上定义的 T 不能在字典上以某种方式解析?
【问题讨论】: