【问题标题】:WCF DataContact and Proxy WCF Service.WCF DataContact 和代理 WCF 服务。
【发布时间】:2013-01-08 20:19:32
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wcf proxy datacontract


    【解决方案1】:

    我有一些疑问:-

    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 中的另一个查询?

    【讨论】:

    • 是的,这就是我所说的第三方,我无权访问他们的代码,是的,它是一种包装器,而不是允许客户端应用程序决定存储在哪个服务器上,我还保存临时数据的本地服务将决定是否需要将其推送到服务器或将其缓存到本地直到可以推送为止。
    • 已根据您的回复更新了解决方案。让我知道这是否有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2011-04-22
    • 2016-08-30
    • 1970-01-01
    相关资源
    最近更新 更多