WCF公开泛型类型';T';
我为Insert和delete操作编写了一个WCF服务,这里我们使用了泛型方法,但它给出了以下错误 “System.Runtime.Serialization.InvalidDataContractException:无法将类型“T”导出为架构类型,因为它是开放泛型类型。只有当泛型类型的所有泛型参数类型都是实际类型时,才能导出泛型类型。” 这里“EntityBase2”是所有实体的基类WCF公开泛型类型';T';,wcf,Wcf,我为Insert和delete操作编写了一个WCF服务,这里我们使用了泛型方法,但它给出了以下错误 “System.Runtime.Serialization.InvalidDataContractException:无法将类型“T”导出为架构类型,因为它是开放泛型类型。只有当泛型类型的所有泛型参数类型都是实际类型时,才能导出泛型类型。” 这里“EntityBase2”是所有实体的基类 [ServiceContract] [ServiceKnownType(typeof(EntityBase2)
[ServiceContract]
[ServiceKnownType(typeof(EntityBase2))]
public interface IBackupUtility
{
[OperationContract]
void Delete<T>(T entity) where T : EntityBase2;
[OperationContract]
void InsertORUpdate<T>(T entity) where T : EntityBase2;
}
[服务合同]
[ServiceKnownType(类型(EntityBase2))]
公共接口IBackupUtility
{
[经营合同]
作废删除(T实体),其中T:EntityBase2;
[经营合同]
无效插入更新(T实体),其中T:EntityBase2;
}
问题是我如何公开泛型类型“T”?我认为这是不可能的,它如何以这种方式生成wsdl 您有两个选择:
- 您可以将类型作为参数发送
- 如果您想为实体公开crud操作,我建议使用代码生成器,可能是EF的T4模板
[DataContract]
public class MyGenericObject<T>
{
private T _id;
[DataMember]
public T ID
{
get { return _id; }
set { _id = value; }
}
}
[OperationContract]
MyGenericObject<int> GetGenericObject();
我们可以在这里看到,我们从WSDL得到的不是一个通用的数据契约—WSDL代理使用某种约定生成一个具有新名称的类
使用的惯例是
泛型类名+类型参数名+哈希
哈希并不总是生成的,只有在有可能发生名称冲突时才会生成。完美的可能重复。帮助很大!文章中关于如何删除散列的有用提示![DataContract(Name=“MyGenericObjectising{0}”]公共类MyGenericObject@Vikas...do你知道我有没有办法打破这个惯例吗?@JohnnyWu…请检查这个链接-
[DataContract]
public class MyGenericObjectOfint