![]() |
1
12
如果您真的想要,您可以在服务契约定义中使用接口,只要您包括您正在进行的已知类型(稍作调整,请参见下文)。 显然,使用一个接口作为泛型类型参数对C 3.0来说是一个过桥。我将已知的类型属性更改为
在某种程度上,这使它起作用。序列化和反序列化本身将起作用,但随后您将面临以下异常:
要使该类型转换起作用,您需要对泛型类型协方差的语言支持,这是在C 4.0中引入的。但是,要使它在C 4.0中工作,您需要添加一个方差修饰符:
然后它就完美地工作了…不幸的是,您没有使用C 4.0。
在服务契约中使用接口的最后一件事是:如果您要从接口中生成服务引用,它将把所有接口参数键入为
|
![]() |
2
2
WCF是一个基于SOA消息的系统——它可以以可以用XML模式表示的序列化XML格式跨线发送任何内容。 不幸的是,XML模式既不知道接口也不知道泛型,所以不——您不能一般地序列化它们——您需要使用具体的类型。 |
![]() |
3
1
无法序列化接口。接口只是定义契约,而不是对象。我想唯一的例外是ISerializable接口。 |
![]() |
4
1
泛型可以序列化,但有一定的限制。例如,给定数据合同:
服务合同:
以及服务实现:
在设置上述服务的服务引用之后,可以运行此代码:
并显示带有“我的测试字符串”的消息框。 注意,服务本身不是通用的,但是使用的数据约定是通用的。此外,在客户端生成的数据协定不是通用的,而是一个“扁平”类,其属性值为string类型:
|