我有一个使用以下方法的 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,常规,版本 = 1.0.0.0,文化 = 中性,无法使用命名空间“http://schemas.datacontract.org/2004/Genaral.SoapCommunication”中数据合同名称为“TernaryWebServiceResponseOflong”的 PublicKeyToken=null',因为它与导入的 DataContract 不匹配。需要从引用类型中排除此类型。
有人可以解释一下,这里到底是什么问题?我知道泛型可以在 WCF 合同中使用,只要它们得到解决,例如 not MyObj<T>
but MyObj<long>
。那么这门课有什么问题呢?是不是在类上定义的 T 不能在字典上以某种方式解决?