WCF暴露泛型类型'T'

Vik*_*ram 5 wcf

我在这里编写了一个用于插入和删除操作的WCF服务,我们使用泛型方法,但是它给出了以下错误"System.Runtime.Serialization.InvalidDataContractException:类型'T'不能作为模式类型导出,因为它是一个开放的泛型类型.你可以如果所有通用参数类型都是实际类型,则只导出泛型类型."

这里"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;        
}
Run Code Online (Sandbox Code Playgroud)

问题是我如何暴露泛型类型'T'?

Pab*_*lla 7

我认为这是不可能的,它怎么能以这种方式生成wsdl?

您有两种选择:

  • 您可以将类型作为参数发送.

  • 如果你想暴露实体的crud操作,我建议使用代码生成器,也许是EF的T4模板.


der*_*urg 7

这篇文章确实很老,但也许有人觉得这个解决方案很有用: WCF和Generics