sql-server - 远程调用 Entity Framework 中的存储过程时服务器无响应

标签 sql-server entity-framework silverlight azure ria

我有一个 Silverlight Web 应用程序托管在 IIS 上的 Azure 虚拟机上。我有另一个虚拟机,它托管 SQL Server 以及与 Web 应用程序交互的其他应用程序。我已使用 Azure 虚拟网络在这两个虚拟机之间设置了 LAN。运行 IIS 和托管 Web 应用程序的虚拟机也是我的域 Controller ,我使用 Windows 身份验证来验证此 Web 应用程序中的用户身份。该应用程序利用 Entity Framework 来执行一些存储过程。

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

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

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

使用内部 IP 通过 Web 应用程序在本地执行时 Executing locally

使用公共(public) IP 通过 Web 应用程序远程执行时 enter image description here

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

任何帮助将不胜感激!

图片链接:

本地执行:/image/4FNGP.png

远程执行:/image/Mo4Wj.png

最佳答案

这可能是 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

关于sql-server - 远程调用 Entity Framework 中的存储过程时服务器无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725838/

相关文章:

sql - 如何将一个表中的记录集和其他记录集加载到ssis中的不同表中

c# - Code First from Database - 无法将 NULL 值插入列 'Id',但值实际上不为 null

sql - 如何在 SSRS 报告中创建动态列

sql - 我可以在 OVER 子句中使用变量而不是整数吗

c# - 带有 Entity Framework 的动态多数据库上下文

c# - 具有单数据库多上下文的 EF6 Code First 迁移

c# - Entity Framework COUNT 性能不佳

c# - 如何在 Silverlight 中使用子窗口,使其不是异步完成的?

Silverlight TextBlock 文本属性与内容

c# - Silverlight C# webservices 等待进程