我在主服务器上有两个WCF服务(由第三方管理,在那里没有太多访问权限),另一个在我的本地服务器上,基本上本地服务存在的原因是本地存储数据如果主服务离线(出于任何原因),则在主服务可用时上传数据。
为了使客户端应用程序保持透明的数据位置(主服务/本地服务),我将本地服务作为代理。即,客户端应用程序仅调用本地服务,然后轮流检查主服务器的健康状况以获取/发布数据,如果它处于脱机状态,则使用本地缓存,并在可用时将数据推回服务器。
现在主服务中有一些复杂的DataContract(它们是它们的加载),而且我因为无法访问实际的数据合同属性文件(它由第三方管理),并且因为任何添加reference(SOAP)在本地创建复杂类型,但是使用XML Serialization属性而不是DataMembers / DataContracts,我将无法按原样重用这些类型,或者我可以吗?
有办法还是我必须通过第三方或创建合同?
答案 0 :(得分:0)
我有一些疑问: -
你的意思是由第三方管理的?它是一个单独的 提供/维护WCF服务的组织,而您没有 有代码吗?
您是本地服务类型的包装器吗?
如果您以任何方式获得最佳的数据合同和服务合同,因为您本地服务可以使用相同的数据合同实施相同的服务合同。除此之外,您还可以再使用一份服务合同,以便在主服务启动时将数据推回。
请参阅以下示例: -
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中还有一个问题,假设您正在复制持久化逻辑(在本地数据存储区中)?