我正在寻找一种方法让为 Web 引用(不是 WCF)生成的代理类实现一个通用接口,以便在客户端应用程序中轻松地在 Web 服务访问和“直接”访问我们的业务层之间切换,例如:
public IBusiness GetBusinessObject()
{
if (_mode = "remote")
return new BusinessWebService.Business(); // access through web service proxy class
else
return new Business(); // direct access
}
CustomSerializableType
但是,生成的代理类中没有引用自定义类型(例如下面的示例中的)。相反,会生成新的相同类型,这使得代理类无法实现接口。
有什么方法可以让生成的代理类引用这些类型,还是我做错了?我是否应该考虑将 Web 服务转换为 WCF 服务?
细节
我们的解决方案包括以下四个项目:
- 业务库(包含业务逻辑,访问数据存储)
- 一个通用库(包含通用功能,包括
CustomSerializableType
) - Web 服务(充当远程客户端和业务层之间的代理)
- 一个窗口应用程序
我们的客户希望 Windows 应用程序能够以两种不同的模式运行:
- 本地模式,应用程序直接使用业务库来访问数据
- 远程模式,应用程序与 Web 服务通信以访问数据
为此,我们创建了一个接口 IBusiness,它位于公共库中,包含所有业务方法。
界面
public interface IBusiness
{
CustomSerializableType DoSomeWork();
}
业务层
public class Business : IBusiness
{
public CustomSerializableType DoSomeWork()
{
// access data store
}
}
网络服务
public class WebServiceBusiness : IBusiness
{
private Business _business = new Business();
[WebMethod]
public CustomSerializableType DoSomeWork()
{
return _business.DoSomeWork();
}
}
生成的代理类(为了便于阅读,省略了大量代码)
public partial class Business
: System.Web.Services.Protocols.SoapHttpClientProtocol
{
public CustomSerializableType DoSomeWork()
{
// ...
}
public partial class CustomSerializableType {
// PROBLEM: this new type is referenced, instead of the
// type in the common library
}
}