0

我有两个 WCF 服务,一个在主服务器上(由第三方管理,在那里没有太多访问权限),另一个在我的本地服务器上,基本上本地服务存在的原因是在本地存储数据以防主服务器服务离线(出于任何原因),然后在主服务可用时上传数据。

为了保持客户端应用程序对数据命中位置(主服务/本地服务)的透明性,我将本地服务作为代理。即,客户端应用程序只会调用本地服务,然后依次检查主服务器的健康状况以获取/发布数据,如果它离线,它使用本地缓存,并在可用时将数据推送回服务器。

现在主服务中有一些复杂的 DataContract(它们是它们的负载),而且我无法访问实际的数据合同属性文件(它由第三方管理),并且由于任何添加的引用(SOAP ) 在本地创建复杂类型,但是使用 XML 序列化属性而不是 DataMembers/DataContracts 我将无法按原样重用这些类型,或者我可以吗?

有没有办法或者我只需要通过第 3 方或创建我的合同?

4

1 回答 1

0

我有一些疑问:-

  1. 那么由第三方管理是什么意思?它是一个单独的组织提供/维护 WCF 服务并且您没有代码吗?

  2. 你是本地服务类型的包装器吗?

如果您以任何方式获得数据合同和服务合同,这将是最好的,因为您是本地服务可以使用相同的数据合同实施相同的服务合同。除此之外,您还可以拥有一个服务合同,您可以使用它在主服务启动时将数据推回。

请参阅下面的示例:-

public interface IMasterService
{
    TResponse PersistData(TRequestObject request);
}

public interface ILocalService
{
    TResponse PushDataInBatch(TRequestObject[] requestBatch);

    //We can add more methods here if required
}

public MasterService : IMasterService
{
    public TResponse PersistData(TRequestObject request) 
    {
        //persist data in Master DB
    }
}

public LocalService : IMasterService, ILocalService
{
    public TResponse PersistData(TRequestObject request) 
    {
        //persist data in local cache
    }

    public TResponse PushDataInBatch(TRequestObject[] requestBatch) 
    {
        //persist data in local cache
    }
}

让我知道上述想法是否对您有所帮助,请随时提供更多信息,然后我们可以详细检查。


如果您可以访问他们的库,则上述实现可能是这种方法,但是如果您没有,那么您只剩下一个选项来获取 MasterService 的服务引用并相应地保留数据。

假设您正在复制持久化逻辑(在本地数据存储中),在您的 LocalService 中再进行一个查询?

于 2013-01-07T16:11:54.753 回答