WCF DataContact和代理WCF服务。

时间:2013-01-07 12:12:50

标签: wcf proxy datacontract

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

为了使客户端应用程序保持透明的数据位置(主服务/本地服务),我将本地服务作为代理。即,客户端应用程序仅调用本地服务,然后轮流检查主服务器的健康状况以获取/发布数据,如果它处于脱机状态,则使用本地缓存,并在可用时将数据推回服务器。

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

有办法还是我必须通过第三方或创建合同?

1 个答案:

答案 0 :(得分:0)

我有一些疑问: -

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

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

  3. 如果您以任何方式获得最佳的数据合同和服务合同,因为您本地服务可以使用相同的数据合同实施相同的服务合同。除此之外,您还可以再使用一份服务合同,以便在主服务启动时将数据推回。

    请参阅以下示例: -

    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中还有一个问题,假设您正在复制持久化逻辑(在本地数据存储区中)?