我正在使用WCF与我的服务器进行通信的Windows Phone 7应用程序。我可以在我的WCF客户端代码中使用接口作为类型吗?
我已经创建了一个服务,并且能够良好地通信,但我无法访问客户端代码中的一个接口。
举例来说,在我的服务器代码,我有这样的事情:
[OperationContract]
[ServiceKnownType(typeof(IField))]
[ServiceKnownType(typeof(TextField))]
[ServiceKnownType(typeof(NumberField))]
FieldForm GetForm();
现在我FieldForm包含以下声明:
[DataContract]
class FieldForm
{
public List<IField> Fields { get; set; }
}
最后,这IField接口有几个实现:
interface IField
{
string Name { get; set; }
}
[DataContract]
class TextField : IField
{
}
[DataContract]
class NumberField : IField
{
}
(这不是我的代码,但描述了我想要的完成)
现在在我的客户端上,我通过WCF收到一个FieldForm对象,并希望遍历Fields列表以确定要创建的UI元素。问题是,该服务没有在客户端提供IField接口,但我确实有可用的实现(TextField和NumberField)。
这导致了一些蹩脚的代码在我的客户端代码,如:
foreach (object field in Fields)
{
if (field is TextField)
// do textfieldy stuff
else if (field is NumberField)
// do numberfieldy stuff
}
当我真的喜欢就用:
foreach (IField field in Fields)
{
field.Name;
}
我缺少在界面上简单的注解为了使接口类型在客户端上可用,或者WCF是否仅提供序列化接口的能力?
有没有一种方法可以访问我的客户端代码中的界面?
谢谢!我非常喜欢共享程序集的想法,尽管这对于这个特定的项目来说是过分的。不过,我一定会记住未来的战略。 – 2010-10-23 18:47:19