我创建了一个带有封闭泛型返回类型的WCF服务操作。我希望将封闭的泛型引用为设计时间名称,而不是运行时名称。实施例
服务
[ServiceContract]
public interface IService1
{
[OperationContract]
Food<BurritoKinds> GetBurrito();
}
[DataContract]
public class Food<T>
{
public T Detail { get; set; }
}
[DataContract]
public enum BurritoKinds
{
[EnumMember]
Bean,
[EnumMember]
Beef
}
public class Service1 : IService1
{
public Food<BurritoKinds> GetBurrito()
{
return new Food<BurritoKinds> { Detail = BurritoKinds.Beef };
}
}
和客户
static void Main(string[] args)
{
var client = new Service1Client();
Food<BurritoKinds> burrito = client.GetBurrito(); //Compile Error
FoodOfBurritoKindsSSCqoCp1 burrito2 = client.GetBurrito();//Works Fine
}
我想在引用类型时使用Food<BurritoKinds>
而不必使用FoodOfBurritoKindsSSCqoCp1
。我不想允许这样做,或者只是为了保存Generic并与服务和客户共享它而不创建新的DLL?谢谢。
答案 0 :(得分:0)
检查http://jeffbarnes.net/blog/post/2007/05/10/WCF-Serialization-and-Generics.aspx Jeff Barnes指出wsdl(而不是wcf)限制了泛型类型的使用:对于消费者来说,它们总是作为具体类型出现。但是,您的.Net代码中的泛型可能会生成不同的具体类型,就像您的FoodOfBurritoKindsSSCqoCp1类型一样。请注意,use可以使用DataContract属性指定生成类型的名称,例如[DataContract(Name =“FoodOf {0}”],它应该在wsdl中为消费者生成FoodOfBurritoKinds。