问题标签 [occasionallyconnected]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - Cloud database (WCF) or Occasionally Connected Architecture with Microsoft Sync?
I'm working on a .NET 4 Winforms app and I'm having a problem deciding on the best way to handle the database. We want to offer a cloud database system where the app can communicate with the "cloud" via WCF services and essentially do the same thing as connecting to the local database (SQL Express locally, SQL Server 2008 R2 on the server).
We see two options:
1) Use WCF and make all calls to the cloud database 2) Use the local database and use Microsoft Sync Framework to keep the cloud in sync
We will eventually have a web application that will also use the cloud data as another front end for the user.
The dilemma is obviously which to use. If we go with Option 1 then we don't have to have a SQL Express installation everywhere the software is used, such as a public location and user's data may be downloaded to that DB. The WCF option allows all data to remain central.
We will eventually fold in mobile so iPhone, iPad, and Android can sync with the cloud as well.
I'm interested in your opinions on a strictly cloud database option vs. the occasionally connected option, i.e. database is local, synced to cloud.
Thank you.
wpf - 哪种身份验证方法对于 Sync Framework 客户端应用程序(数据库同步)是正确的?
用户将在互联网连接不佳的地区在 Windows 客户端应用程序上收集数据。几天甚至几周远离任何网络连接。幸运者会将他们的笔记本电脑带回区域办事处,以同步他们在登录公司网络时收集的数据。其他人将不得不求助于插入客户端/客户互联网连接和/或网吧连接来执行数据同步。
该应用程序将数据存储在本地 sql server 2008 R2 express 数据库中,当连接可用时,客户端将启动数据库同步到总部的 SQL Server 2008 标准。
用户身份验证和基于角色的安全性是应用程序的要求。我应该使用哪种方法:表单身份验证或 Windows 身份验证?(而且我想我遇到了第三种称为自定义身份验证的类型?)
对不起,我真的迷失了身份验证的东西——第一次这样做,不确定每种类型的优缺点。谁能建议我应该在这种情况下使用哪个?
更新:我现在实际上已经使用连接字符串中的 SQL Server 的外部 IP 地址和用户登录的 SQL 身份验证来进行同步。这是一种公认的做法,还是我违反了任何安全原则?
我仍然需要了解基于角色的安全部分——基于角色的安全可以与 SQL 身份验证一起使用吗?
此外,新问题:一些远程用户在从总部获得笔记本电脑后可能永远不会再次登录到组织的域,因此他们与域的登录信任关系在几个月后到期。因此,我想 Windows 身份验证无论如何都不可行......
javascript - 移动/桌面 - 什么策略有意义
我的老板有远大的梦想。
他想编写一个在桌面和移动设备上运行的应用程序。此外,他希望它偶尔连接(可以在没有互联网连接的情况下运行)。该应用程序将严重依赖数据库中的数据。
与他交谈的每个人都在不断向他推广 HTML5/JavaScript,以实现一次编写、到处运行(ish)的解决方案。
我对这种环境没有太多经验——使用 JavaScript 从数据库中获取数据,用于 JavaScript 的 ORM 等等。我可能会超前。
在尝试制定策略以尽可能接近他的目标时,我应该注意哪些事项?以下是我的假设和问题:
期望/假设
- 我希望我将不得不使用似乎随 HTML5 和本地存储而兴起的“嵌入式”或本地数据库之一。
- 我希望我还必须找到某种方法将这些数据与位于某处服务器上的数据同步。
- 我希望这些数据的同步必须是自制的。
- 我想要某种 ORM 来使处理数据更容易。
- 我预计会遇到与本地数据库大小相关的各种奇怪的事情。
- 我希望必须在客户端运行所有应用程序的代码,因为它们应该能够在没有互联网连接的情况下运行应用程序。
问题
我在做什么?
我有点不知所措,甚至不知道从哪里开始。
为了把它变成有可能得到正确/错误答案的东西,这里有一些有助于了解的事情:
- HTML5/JavaScript 方法是否听起来不错(考虑到偶尔连接的目标、移动设备和桌面)?
- 我应该寻找什么样的框架和工具来简化应用程序的开发?
- 他是不是要求太多了?
提前感谢您提供的任何建议/指导。
按请求:应用程序做什么? 该应用程序(或多或少)是可配置产品的报价/定价应用程序。有一堆产品(底柜、壁柜等),一堆标准的可配置选项(木头、饰面、门样式),还有一堆(不太标准的)对它们的修改(减少深度、增加高度、 ETC。)。
根据您选择的标准可配置选项,它会更改每种产品的基本价格。然后,您可以对它们进行修改(这也是有代价的)。
大多数应用程序已经存在(尽管作为没有本地存储数据的 WPF 应用程序)。它被设计成可以销售给制造这些可配置物品(主要是厨柜等)的不同制造商。每个制造商对他们提供的木材/饰面/等以及他们如何确定产品的基本价格(也有所不同)以及如何混合/匹配不同的木材/饰面等都有自己的规则。
等等,等等,等等,每个制造商都非常独特。
为了解决这个问题,我们创建了一种基于公式的方法,一旦您设置了他们的产品/选项/等,您就可以编写一些公式来定义它们之间的关系,以及如何为它们定价。
在我们当前的模型中,应用程序在用户的 PC 上运行,数据在应用程序调用的 Web 服务器上。他想把这一切变成一个偶尔连接的移动应用程序,我们也可以在桌面上使用。
与之相关的数据相当多,因为任何制造商的数据都将包含图像、描述、注释、数千种产品/修改以及有关它们的大量信息(宽度、高度、深度、门数等)。
linux - 用于偶尔连接复制的基于 Linux 的 RDBMS
我正在寻找满足以下要求的数据库复制解决方案:
- 使用与 Linux 兼容的 RDBMS(Atom 32 位单核架构)
- 在偶尔连接的环境中工作,具有双向数据流
- 无需重新启动数据库引擎即可即时处理添加对等点
以下是我的配置的详细信息:我在远程位置运行多个基于 Linux 的迷你服务器,这些服务器经常一次失去互联网连接长达一周。这些迷你服务器记录来自用户的数据,并且应该将该数据复制到他们在网络上可以看到的任何对等点(可能在给定的 vlan 中部署多个以实现冗余)。当连接到互联网时,这些迷你服务器应该与我们的中央服务器同步,数据可能从迷你服务器流向中央服务器,或从中央服务器流向迷你服务器。
我认为 SQL Server 可以处理其中的大部分,但它不能在 Linux 上运行。有任何想法吗?我可以进行大量自定义编码以使解决方案正常工作,但我当前的解决方案是我自己的自定义复制系统,不用说,它不符合企业软件的期望......
sql - 使具有同步服务的 OCA 使用动态表名
我正在开发基于 SQL 服务器数据库和 SQL CE 客户端数据库的 OCA 应用程序。每个用户在 SQL 服务器数据库中都有自己的表。每个用户的表具有相同的架构,但可以有不同的数据。我想根据他们的 SQL 服务器数据库表名(设置为 userID +“__usersdatatable”)在客户端应用程序中动态设置同步表名称。
当我不尝试更改任何内容时,同步服务运行没有问题。我最新的想法是改变 SyncTable.TableName = "jsmith_usersdatatable"; 在 oninitialized() 方法的 LocalDataCache1SyncAgent.cs 中。但是,我收到以下错误:
“无法初始化客户端数据库,因为 DbServerSyncProvider 的 GetSchema() 方法无法检索表 'zlentz_GOBOS' 的架构。请确保您可以建立到客户端数据库的连接,并且 SelectIncrementalInsertsCommand 属性或 SelectIncrementalUpdatesCommand SyncAdapter 的属性指定正确。”
简而言之,每个 OCA 都需要同步到不同的表(双向)。我显然不是 SQL 或同步服务专家,所以建议会有所帮助。:) 提前致谢!
c# - 偶尔连接的应用程序 - SQL Compact+EntityFramework+SyncFramework 问题
我目前正在探索属于“偶尔连接”类别的新应用程序的不同途径。经过一些研究,我“决定”使用中央 SQLServer 和带有 SqlCompact 数据库的客户端,这些数据库将在需要/可能时同步。
当将所有内容“连接”在一起时,我最终遇到了以下异常。
进一步阅读帮助我意识到 Sync Framework 不支持 SqlServerCe v4.0,这使其与 EntityFramework 不兼容。
我现在想知道我要走的路是否正确。任何替代解决方案或解决方法将不胜感激。
一些可能相关的进一步信息:
- 客户数量 ~100
- 允许双向同步的客户端数量(更新中央服务器)~10
- 数据库非常小(20MB),预计增长不大。
enterprise-library - 转换始终连接到偶尔连接的应用程序
我有一个现有的客户端-服务器 3 层应用程序,具有以下堆栈:
- 智能客户端(Win-Forms)
- IIS/ASP.NET
- sql服务器
一些数据存储在实体-属性-值(EAV)模型中。所有主键都是整数标识列。数据库操作大多使用存储过程来执行。
我的任务是将此应用程序转换为偶尔连接的应用程序 (OCA)
客户端上的安装和资源限制应该没有问题。
这对我来说是第一个这样的项目。
我已经阅读了一些关于
- 毫秒同步框架
- 企业图书馆/偶尔连接的智能客户端
- SQL 服务器复制
为了保留现有代码并限制更改影响,我正在考虑在每个客户端上安装 3 层应用程序,使用同步框架来处理 WS 上的同步来处理同步。还拥有一台同步将参考的主服务器。
这个解决方案看起来可行吗?
是否有任何其他关于将始终连接的 3 层应用程序转换为偶尔连接的应用程序的资源?
谢谢你 。
wcf - 偶尔连接的科学领域期刊解决方案的数据架构
我们正在着手开发一种解决方案来处理科学领域数据的收集和存储。
该解决方案应处理连接到通过蜂窝网络连接到中央 SQL 服务器的车辆(卡车、船只等)的多个厚 Windows PC 现场客户端。
客户端向中央服务器提供从设备收集的数据以及手动输入。客户端使用来自中央服务器的半静态数据,例如人员列表,以及与特定任务相关的预定义数据。
与服务器的连接不稳定,因此客户端应该能够在不连接中央服务器长达 3 小时的情况下完全运行。
我们将 MSMQ 和 Microsoft Sync Framework 视为处理客户端/服务器通信的选项。您可以提供的任何见解将不胜感激。
domain-driven-design - 偶尔连接 CQRS 系统
问题:
两名员工(A 和 B)在编辑客户 #123(例如版本 #20)时同时下线,而在下线时继续进行更改...
场景:
1 - 两名员工编辑客户 #123 并对一个或多个相同属性进行更改。
2 - 两名员工编辑客户 #123,但不进行相同的更改(他们相互交叉但不接触)。
...然后他们都重新上线,第一个员工 A 追加,从而将客户更改为版本 #21,然后是员工 B,仍然在版本 #20
问题:
我们在场景 1 中保留谁的更改?
我们可以在场景 2 中进行合并,如何?
语境:
1 - CQRS + 事件溯源风格系统
2 - 使用事件溯源数据库作为队列
3 - 读取模型的最终一致性
4 - RESTful API
EDIT-1:根据迄今为止的答案进行澄清:
例如,为了执行细粒度合并,我需要为表单中的每个字段设置一个命令?
上面,ChangeName、ChangeSupplier、ChangeDescription 等的细粒度命令,每个都有自己的时间戳,将允许在事件 A 和 B 都更新 ChangedName 时自动合并?
Edit-2:根据特定事件存储的使用情况进行跟进:
似乎我将使用 @GetEventStore 来持久化我的事件流。
他们使用乐观并发如下:
流中的每个事件都会将流版本增加 1
写入可以指定预期版本,利用写入器上的 ES-ExpectedVersion 标头
-1 指定流不应该已经存在
0及以上指定流版本
如果流不是该版本,则写入将失败,您可以使用新的预期版本号重试,或者您重新处理该行为并决定如果您这样选择就可以了。
如果未指定 ES-Expected Version,则禁用乐观并发控制
在这种情况下,Optimistic Concurrency 不仅基于 Message ID,还基于 Event #
sql-server - 用于构建 OCA(偶尔连接的应用程序)的工具 2015
这个问题以前有人问过,但时代和技术似乎发生了翻天覆地的变化,所以我觉得有必要再问一次。
更改包括: * Compact 3.5 SP2 已弃用(很快将不再支持) * Compact 4.0 不支持复制/同步(是的,有一种变通方法,但这对于企业解决方案来说还不够)
对于在 .NET 堆栈上构建新应用程序,对于偶尔连接的应用程序的本地数据库应该使用什么技术。
客户端平台将是一个 windows 平板电脑(带有 windows 8.1/10 Professional)。服务器是当前的 SQL Server 2008 R2 Enterprise。
我们倾向于仅将 SQL Server 2014 Express 用于客户端数据库,因为 Compact Edition 似乎完全落伍了。另外 - 在客户端/本地数据库和服务器数据库之间使用合并复制。