- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Delphi-XE2 中构建了一个 DataSnap web 服务,它使用了 TDSServer
和 TDSHTTPService
组件。客户端连接到服务器(网络服务)并运行 DataSnap 服务器方法来检索数据。服务器对所有连接使用 TDSLifeCycle.Session
。如果可能,我想继续使用 Session
,因为我将 session 信息存储在线程变量中...
我可以使用 Internet Explorer 对 DataSnap 服务器进行身份验证并从中检索数据。如果我不让 IE 闲置 30 秒(或者它与服务器断开连接),它将为每个方法请求重用相同的连接。
我可以使用一个简单的 Delphi 应用程序,该应用程序使用 TIdHTTP 连接到 DataSnap 服务器。将 keep-alive
添加到其 Request.Connection
属性使其保持连接 forever 并为所有重用 one 连接方法调用。
.
第 3 方公司正在构建 WCF 应用程序以访问 DataSnap 服务。他们无法让 WCF 应用程序使用仅一个服务连接。初始身份验证请求和第一个方法调用使用相同的连接,但后续请求会创建新连接,这可以通过在他们的计算机上运行 netstat
并使用多个源端口看到从他们的应用程序到我的服务的新 ESTABLISHED 连接来证明。新连接在 DataSnap 服务器中创建新线程,该线程无法访问经过身份验证的线程的 session 变量。
.
我知道我可以将 DataSnap 服务器更改为 Invocation
模型,从而无需为每个客户端维护一个持久连接,并且会在需要时执行此操作。在这样做之前,我认为谨慎的做法是看看是否有其他人知道如何解决这个问题。
.
WCF 客户端应用程序是否可以创建到非 WCF 服务器(DataSnap 服务器)的单个持久连接,用于所有方法调用而不创建新连接?这是怎么做到的?在 Visual Studio 中为 C# WCF 项目添加合适的【装饰】就这么简单吗?
非常感谢任何建议!
.
仅供引用 - 我无权访问第 3 方的代码,因此我无法提供 WCF 代码示例。
最佳答案
您的 Delphi 应用程序提供有状态 Web 服务(使用 session 变量),并且 WCF web services are stateless by default ,包括 WCF 客户端。
也许 this answer指向正确的配置(ServiceContract 的 wsHttpBinding 和 SessionMode)。
来自 MSDN 文档:
For example, if the SessionMode property is set to SessionMode.Required and the InstanceContextMode property is set to PerSession, clients can use the same connection to make repeated calls to the same service object.
(由我突出显示)
但是,由于 DataSnap 主要不是为与 WCF 的互操作性而设计的,因此重新设计 Delphi 端以使用无状态 Web 服务模型而不是有状态模型可能更容易。这将需要对每个服务请求进行身份验证,但在内部,Delphi Web 服务可以缓存一些数据以减少查找时间,类似于当前 session 状态。
关于WCF 客户端应用程序持久连接到非 WCF (DataSnap) 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216840/
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
DSTCPServerTransport.pas 中的“procedure TDSTCPChannel.Open”方法在分配“FChannelInfo”时使用连接用户的私有(private)IP 地址
我很好奇如何处理这个问题;我目前有一个带有 TDSAuthenticationManager 类管理身份验证的 DataSnap 服务器设置。 如果身份验证失败,我可以直接在 TMemo 或类似的表单
我正在使用 Delphi 10.1 Berlin Update 2 Enterprise 和 DataSnap 客户端/服务器 REST 框架。 如果我在不调试的情况下运行应用程序并调用用户无权调用的
我最近开始使用 Delphi 中的 DataSnap 来生成 RESTful Web 服务。在遵循 Marco Cantu 本人和互联网上其他几个人的指导后,我成功地使整个“链条”正常工作。 但是有一
我是一名业余程序员,尝试使用 Delphi XE 构建客户端/服务器应用程序套件。 我偶尔会编写独立应用程序以供个人使用。问题是我对网络/多层一无所知。不过我愿意学习。 我寻找方法来做到这一点,Dat
以下错误发生在我在下面指出的行中。我不明白为什么会出现此错误。 Project ChirpSR.exe raised exception class $C0000005 with message 'a
我希望能够声明具有以下签名的 Data Snap 方法 type TLoginInfo = record Username: string; Password: string;
我在 Delphi XE6 中有一个 datasnap 客户端/服务器 我在客户端的以下服务器方法调用中收到无效的指针操作。 S := ClientModule1.ServerMethods1Clie
我再次遇到这样的情况:我花费了大量的时间来尝试根据我的需要自定义 datasnap 回调示例。我是老派的 OOP 程序员,在我的“工具箱”PODO 风格中有几个非常大的对象层次结构:-) ..并且拥有
与编写DataSnap相比,使用DataSnap有哪些优势?肥皂服务器应用程序。 我知道Datasnap 可以使用TCP/IP 代替soap。 问候 桑迪普 最佳答案 使用 DataSnap,您可以导
一旦您使用正确的参数名称(Delphi Datasnap Server User Authentication 中进行了说明),Datasnap 身份验证就非常简单。下一个问题是在使用 FireDAC
我正在尝试找出“正确”的方法来从 DataSnap 应用程序的服务器建立到数据库的连接。 数据库中的每个(大多数)表都有名为“Updated”和“Created”(这是写入记录时的当前时间戳)的字段(
我试图在 DataSnap 服务器/客户端之间传输一些大流(~1Mb),但无济于事。我试图理解 Jim Tierney ( http://blogs.embarcadero.com/jimtierne
我正在研究将基于 SQL 的胖客户端 Delphi 应用程序迁移到多层瘦客户端,并且一直在考虑在 Delphi 2010 中使用 Datasnap。我已经阅读了 Bob Swart 撰写的白皮书并进一
我有一个 Delphi XE2 DataSnap 服务器(Windows 服务),连接到后端 MS SQL Server 2008(同一服务器框),为 REST 客户端请求提供服务。 一段时间以来,一
我们使用有状态的 DataSnap 服务器来执行某些业务逻辑任务,并提供客户端数据集数据。 如果我们必须更新服务器来修改业务规则,我们将新版本复制到一个新的空文件夹中并注册它(取决于 Delphi 版
我决定从 SOAP 服务器迁移到 DataSnap 服务器和 REST。我已经查看并遵循了几个教程,甚至尝试了 DXE5 演示,但我一直得到相同的结果。问题是我无法将客户端应用程序上的 TSQLCon
我有一个使用 PC1 和 Zlib 过滤器的 tcp/ip Datasnap -XE 服务器 在客户端上,这两个过滤器都是在 DataSnap TSqlConnection 中定义的 当客户端连接到服
我有一个 Datasnap 应用程序(Delphi 7),它使用 TSocketConnectiom 连接到应用程序服务器。如果我的应用程序在打开客户端数据集后长时间保持空闲状态,大多数时候当我想刷新
我是一名优秀的程序员,十分优秀!