【发布时间】:2017-10-20 21:59:59
【问题描述】:
我正在开发几个 WCF Http Web 服务。所有这些 WCF Web 服务都具有相同的操作,但每个 WCF Web 服务对于给定的操作返回不同的类型。
例如,有两个服务ServiceA 和ServiceB,都具有操作GetData。但是,对于ServiceA,GetData 操作必须返回一个int,对于ServiceB,GetData 操作必须返回一个string:
ServiceA 接口:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
int GetData();
}
ServiceA 实现:
public class ServiceA : IServiceA
{
public int GetData()
{
return 0;
}
}
ServiceB 接口:
[ServiceContract]
public interface IServiceB
{
[OperationContract]
string GetData();
}
ServiceA 实现:
public class ServiceB : IServiceB
{
public string GetData()
{
return "any text";
}
}
WCF Web 服务需要正确地公开元数据,我的意思是,它们必须公开GetData 操作返回的数据类型(string),以便告诉服务使用者哪种类型的数据预计。换句话说,拥有 XSD 架构。
如您所知,当您创建一个新的 WCF Web 服务时,VS 会创建一个用于声明操作的接口并声明所需的[ServiceContract] 和[OperationContract] 属性,并创建实现该接口的类。
为了使代码标准化并节省键入接口实现的时间,我想创建一个对所有 WCF Web 服务通用的接口,它将通用操作(例如GetData)声明为通用,然后, 指定实现的类型。
我想做这样的事情:
通用接口:
[ServiceContract]
public interface IServiceCommon
{
[OperationContract]
T GetData<T>();
}
ServiceA 接口:
[ServiceContract]
public interface IServiceA : IServiceCommon
{
}
ServiceA 实现:
public class ServiceA : IServiceA
{
public int GetData()
{
return 0;
}
}
但是,我收到以下错误:
'ServiceA' 没有实现接口成员'IServiceCommon.GetData()'
如何实现在 GetData 方法上返回任何类型值的任何服务类?
【问题讨论】: