【问题标题】:DataSnap server socket error 10061DataSnap 服务器套接字错误 10061
【发布时间】:2014-03-27 04:35:39
【问题描述】:

我决定从 SOAP 服务器迁移到 DataSnap 服务器和 REST。我已经查看并遵循了几个教程,甚至尝试了 DXE5 演示,但我一直得到相同的结果。问题是我无法将客户端应用程序上的 TSQLConnection 连接到正在运行的 DataSnap 服务器。

这是代码:

Socket Error # 10061
Connection refused..
OS = Windows 7 64bit
RAD Studio XE5 Update 2

跟随 Pawel Glowacki(和其他人)的 DataSnap 多层视频教程。

在创建 Datasnap 客户端/服务器应用程序时,我无法将客户端 TSQLConnection 连接到 DSServer。

  1. 服务器正在运行(本地主机)!

  2. 防火墙已停用。

  3. 将端口 211 添加到 Windows 防火墙入站和出站规则。

  4. 我已尝试创建 DataSnat REST 应用程序,但出现了同样的错误。

  5. 在 DXE 和 DXE3 中执行此操作时得到相同的结果。

复制步骤

  1. 创建 Datasnap 服务器(尝试了 DataModule 和 DSServerModule)。
  2. 将默认端口保留为 211(也尝试了其他几个端口(8080、9000)。
  3. 运行服务器。到这里为止一切正常。
  4. 创建一个 VCL 表单应用程序。
  5. 将 TSQLConnection 添加到主窗体。
  6. 将驱动程序设置为 DataSnap。
  7. CommunicationProtocol = tcp/ip。
  8. DataSnapCONtext = datasnap/
  9. HostName = localhost(已尝试 127.0.0.1 和我电脑的 IP 地址)。
  10. Lo​​ginPropt = False。
  11. 运行服务器。
  12. 启动服务器。
  13. 在浏览器中打开可以正常工作。
  14. 将 TSQLConnection 上的 Connected 属性设置为 true。
  15. 生成套接字错误 10061,我无法通过此操作。

这是堆栈跟踪。

[5110E67F]{IndySystem190.bpl} IdStack.TIdStack.RaiseSocketError (Line 771, "IdStack.pas" + 42) + $21
[5110E606]{IndySystem190.bpl} IdStack.TIdStack.RaiseLastSocketError (Line 725, "IdStack.pas" + 1) + $F
[5110E571]{IndySystem190.bpl} IdStack.TIdStack.CheckForSocketError (Line 699, "IdStack.pas" + 2) + $3
[5110A9F4]{IndySystem190.bpl} IdStackWindows.TIdStackWindows.Connect (Line 1771, "IdStackWindows.pas" + 20) + $13
[50DF5849]{IndyCore190.bpl} IdSocketHandle.TIdSocketHandle.Connect (Line 294, "IdSocketHandle.pas" + 1) + $25
[50E01CF9]{IndyCore190.bpl} IdIOHandlerStack.TIdIOHandlerStack.ConnectClient (Line 344, "IdIOHandlerStack.pas" + 52) + $A
[50E05283]{IndyCore190.bpl} IdIOHandlerSocket.TIdIOHandlerSocket.Open (Line 332, "IdIOHandlerSocket.pas" + 13) + $4
[50E01011]{IndyCore190.bpl} IdTCPClient.TIdTCPClientCustom.Connect (Line 317, "IdTCPClient.pas" + 52) + $B
[16F76AFD]{IndyIPClient190.bpl} IPPeerClient.TIdTCPClientPeerIP.Connect (Line 1166, "IPPeerClient.pas" + 0) + $5
[520AC809]{DbxClientDriver190.bpl} Data.DbxSocketChannelNative.TDBXIdTCPLayer.Open (Line 378, "Data.DbxSocketChannelNative.pas" + 27) + $5
[520AC44B]{DbxClientDriver190.bpl} Data.DbxSocketChannelNative.TDBXSocketChannel.Open (Line 149, "Data.DbxSocketChannelNative.pas" + 13) + $E
[50059970]{rtl190.bpl  } System.@FreeMem (Line 4364, "System.pas" + 20) + $0
[50060DA0]{rtl190.bpl  } System.@UStrClr (Line 23846, "System.pas" + 14) + $0
[520AEA09]{DbxClientDriver190.bpl} Data.DBXTransportFilter.TDBXFilterSocketChannel.SetDBXProperties (Line 712, "Data.DBXTransportFilter.pas" + 8) + $10
[520AE999]{DbxClientDriver190.bpl} Data.DBXTransportFilter.TDBXFilterSocketChannel.Open (Line 693, "Data.DBXTransportFilter.pas" + 0) + $5
[520B0897]{DbxClientDriver190.bpl} Data.DBXClient.TDBXClientConnection.DerivedOpen (Line 430, "Data.DBXClient.pas" + 5) + $8
[5214F8D7]{DbxCommonDriver190.bpl} Data.DBXCommon.TDBXConnection.Open (Line 8599, "Data.DBXCommon.pas" + 5) + $4
[5214AC72]{DbxCommonDriver190.bpl} Data.DBXCommon.TDBXConnectionFactory.GetConnection (Line 6724, "Data.DBXCommon.pas" + 14) + $5
[5214AB6D]{DbxCommonDriver190.bpl} Data.DBXCommon.TDBXConnectionFactory.GetConnection (Line 6701, "Data.DBXCommon.pas" + 0) + $5
[51392D29]{dbexpress190.bpl} Data.SqlExpr.TSQLConnection.DoConnect (Line 2490, "Data.SqlExpr.pas" + 56) + $6
[50A8AA4D]{dbrtl190.bpl} Data.DB.TCustomConnection.SetConnected (Line 3482, "Data.DB.pas" + 8) + $4
[50128326]{rtl190.bpl  } System.TypInfo.SetOrdProp (Line 2583, "System.TypInfo.pas" + 21) + $1
[2110BA52]{designide190.bpl} DesignEditors.TPropertyEditor.SetOrdValue (Line 839, "DesignEditors.pas" + 2) + $E
[211564F7]{designide190.bpl} VCLEditors.TBooleanProperty.MouseUp (Line 1864, "VCLEditors.pas" + 5) + $10
[212A13CD]{vclide190.bpl} PropBox.TCustomPropListBox.ItemMouseUp (Line 1631, "PropBox.pas" + 17) + $1B
[212A15C3]{vclide190.bpl} PropBox.TCustomPropListBox.MouseUp (Line 1696, "PropBox.pas" + 1) + $D
[504634D8]{vcl190.bpl  } Vcl.Controls.TControl.DoMouseUp (Line 7468, "Vcl.Controls.pas" + 2) + $28
[50463554]{vcl190.bpl  } Vcl.Controls.TControl.WMLButtonUp (Line 7481, "Vcl.Controls.pas" + 9) + $6
[212A6D50]{vclide190.bpl} IDEInspListBox.TInspListBox.WMLButtonUp (Line 1632, "IDEInspListBox.pas" + 3) + $4
[50462B49]{vcl190.bpl  } Vcl.Controls.TControl.WndProc (Line 7224, "Vcl.Controls.pas" + 91) + $6
[1ECD5CD1]{cxLibraryRS19.bpl} dxHooks.TdxSystemHook.ProcessHookProcs$qqriuii + $99
[1ECD5A9A]{cxLibraryRS19.bpl} dxHooks.dxSystemGetMessageHook$qqsiuii + $16
[50466E9F]{vcl190.bpl  } Vcl.Controls.TWinControl.IsControlMouseMsg (Line 9807, "Vcl.Controls.pas" + 1) + $9
[50467669]{vcl190.bpl  } Vcl.Controls.TWinControl.WndProc (Line 10039, "Vcl.Controls.pas" + 153) + $6
[5048AF69]{vcl190.bpl  } Vcl.StdCtrls.TCustomListBox.WndProc (Line 7108, "Vcl.StdCtrls.pas" + 55) + $5
[50466CAC]{vcl190.bpl  } Vcl.Controls.TWinControl.MainWndProc (Line 9751, "Vcl.Controls.pas" + 3) + $6
[501749C4]{rtl190.bpl  } System.Classes.StdWndProc (Line 17010, "System.Classes.pas" + 5) + $0
[5059214F]{vcl190.bpl  } Vcl.Forms.TApplication.CancelHint (Line 11117, "Vcl.Forms.pas" + 6) + $E
[50590DC3]{vcl190.bpl  } Vcl.Forms.TApplication.ProcessMessage (Line 10288, "Vcl.Forms.pas" + 23) + $1
[50590E06]{vcl190.bpl  } Vcl.Forms.TApplication.HandleMessage (Line 10318, "Vcl.Forms.pas" + 1) + $4
[50591141]{vcl190.bpl  } Vcl.Forms.TApplication.Run (Line 10456, "Vcl.Forms.pas" + 26) + $3

我该怎么做?

【问题讨论】:

  • 当服务器开始运行时,您是否收到有关应用程序应该被阻止还是解除阻止的消息?如果没有,请检查数据模块是否正在自动创建 - 如果不是,请尝试移动它。
  • 澄清一下,您应该确保创建的是 ServerContainer 数据模块。
  • 早上好,理查德,感谢您的帖子。上周我在工作中测试这个 DataSnap 功能时遇到了这个问题。我们正在进行几个项目。压力太大了。周末回家后,我决定四处玩耍,看看能不能解决这个问题。几分钟后,在测试应用程序的项目源代码中挖掘后,我注意到一些表单不在自动创建列表中,所以我将其中一些移到自动创建和瞧!这一切都很好。在这种情况下,您的解决方案是正确的,因此感谢您的观察。
  • 顺便说一句 - 我如何为这个解决方案投票???
  • 很高兴这有效。添加了正确的答案,以便您可以将其标记为已接受的答案。 :-)

标签: delphi rest datasnap


【解决方案1】:

确保ServerContainer数据模块在启动时自动创建,或者自己创建。

【讨论】:

    【解决方案2】:

    使用向导在 LocalHost 上创建 DataSnap REST 客户端模块(在测试端口 8080 时)时出现 Socket Error #10061

    我所做的是运行 DataSnap REST 服务器应用程序 (.exe) 并在 LocalHost 的 8080 端口上启动它。我添加了一个新的 DataSnap REST 客户端模块。测试了 8080 端口,瞧!成功了。

    【讨论】:

      【解决方案3】:

      通过将TDSTCPServerTransport 组件添加到我的ServerContainer 数据模块来解决它。

      【讨论】:

      • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。
      • 我会按原样回答,原因是同样的问题,我正在使用 RESTFull + JSON 应用程序,并且正在添加 DataSnap,但没有组件我有 SocketError#10061跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多