【问题标题】:No response from server when calling stored procedure in entity framework remotely远程调用实体框架中的存储过程时服务器没有响应
【发布时间】:2014-11-04 00:33:14
【问题描述】:

我有一个 Silverlight Web 应用程序托管在 IIS 上的 Azure vm 上。我有另一个 VM 托管 SQL Server 以及 Web 应用程序与之交互的其他应用程序。我已经使用 Azure 虚拟网络在这两个 VM 之间建立了 LAN。运行 IIS 并托管 Web 应用程序的 vm 也是我的域控制器,我正在使用 Windows 身份验证来验证此 Web 应用程序中的用户。该应用程序利用实体框架来执行一些存储过程。

总体而言,在本地和远程访问 Web 应用程序时,一切似乎都运行良好,但是有一个特定的存储过程需要大约 25 分钟才能执行,当通过此 Web 应用程序远程执行时,它的行为似乎不正常。请记住,这 25 分钟实际上是预期时间,因为此存储过程正在处理数百万条记录。

这就是我遇到的问题。从 SQL Server Management Studio 执行此存储过程时,它会在大约 25 分钟内完成。当我通过使用托管应用程序的服务器的内部 IP 从 Web 应用程序本地执行此存储过程时,它会在大约 25 分钟内竞争,服务器将响应发送回,应用程序会更新其状态。但是当我使用服务器的公共 ip 通过 web 应用程序远程执行时,虽然存储过程在服务器上执行并在 25 分钟内完成,但应用程序永远不会从服务器得到响应,一直保持忙碌状态。

我知道存储过程会执行,因为我直接在数据库服务器中对其进行跟踪,并且还使用 sql profiler 跟踪来自实体框架的任何打开的连接,即使在存储过程完成执行之后也存在。 我也在使用 fiddler 来跟踪所有 HTTP 流量,这就是我所看到的。

在使用内部 ip 通过 Web 应用在本地执行时

使用公共 IP 通过 Web 应用程序远程执行时

所有其他存储过程都需要几秒钟的时间来执行,它们似乎可以在本地和远程工作。我不确定 Azure 的端点映射是否与此有关。执行此存储过程时,我将 commandtimeout 属性设置为 0。

任何帮助将不胜感激!

图片链接:

本地执行:http://i.imgur.com/NGNre3T.png

远程执行:http://i.imgur.com/haB3fwm.png

【问题讨论】:

    标签: sql-server entity-framework silverlight azure ria


    【解决方案1】:

    这可能是 Azure 负载均衡器的空闲超时。看看this page,看看它是否能说明问题。使用最新版本的 Azure Powershell,您可以通过以下方式检查当前超时设置:

    Get-AzureVM –ServiceName “your-service-name” –Name “your-vm-name” | Get-AzureEndpoint
    

    根据您的设置,您可以使用以下方法进行设置:

    Set-AzurePublicIP –PublicIPName "the-ip-name" –VM “your-vm-name” -IdleTimeoutInMinutes 15
    

    【讨论】:

    • 太棒了!我已经阅读了 azure 负载均衡器的 4 分钟默认超时,并遵循了一些建议,即每 4 分钟或更短时间发送一次数据包以保持连接处于活动状态。我尝试每 2 分钟发送一次数据包以保持 tcp 连接处于活动状态,但由于某种原因这似乎没有帮助。我不知道有一种方法可以在创建端点时设置空闲超时值。您发布的文章成功了。我将超时设置为 30 分钟,到目前为止,存储已在运行,并且服务器在 25 分钟内按预期执行后一直响应。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多