首页 文章

WCF DataContact和代理WCF服务 .

提问于
浏览
0

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

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

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

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

1 回答

  • 0

    我有一些疑问: -

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

    • 你是本地服务类的包装器吗?

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

    请参阅以下示例: -

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

相关问题