Windows Azure终止连接并返回324错误代码。

8

我已经在Windows Azure中尝试了一些实验,效果还不错。因此,我开始使用Azure模拟器开发我的应用程序。

今天我在Windows Azure中进行了第一次部署测试,并遇到了第一个问题:

No connection could be made because the target machine actively refused it 127.0.0.1:10000

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it 127.0.0.1:10000

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[SocketException (0x274d): No connection could be made because the target machine actively refused it 127.0.0.1:10000]
   System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) +2724507
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) +392

[WebException: Unable to connect to the remote server]
   Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result() +96
   Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait() +271
   Microsoft.WindowsAzure.StorageClient.CloudBlobContainer.Delete(BlobRequestOptions options) +213
   MyProject.Web.MvcApplication.InitBlobs() in C:\Sites\MyProject\MyProject\MyProject.Web\Global.asax.cs:85
   MyProject.Web.MvcApplication.Application_Start() in C:\Sites\MyProject\MyProject\MyProject.Web\Global.asax.cs:52

这是第一次部署,所以我试图删除一个不存在的容器。现在我处理了异常。
我重新部署了项目,没有收到任何服务器错误。它只是结束连接并留下这个错误:Error 324 (net::ERR_EMPTY_RESPONSE) 我猜我在配置中漏掉了一些东西,但我无法找到确切的原因。
谢谢你的帮助!
编辑: 这个部署本身是该应用程序的第一个部署,但它不是我在Windows Azure上执行的第一个部署。当我开始为Windows Azure开发时,我已经部署了一些msdn实验室。

我从堆栈跟踪中注意到,你似乎正在从global.asax.cs调用Blob存储 - 你可以尝试从控制器操作中进行调用,看看是否会出现相同的错误?此外,我看到了"无法连接到远程服务器"的消息。你确定账户名称和密钥都准确无误,并来自同一存储账户吗?我之前曾出现过这种问题,导致出现奇怪的错误... - Chris Koenig
我尝试将 Blob 存储的调用移动到我的 HomeController 中,但没有任何变化。我已经检查了我的凭据。它们都是有效的,并与同一个帐户关联。我还尝试直接在 global.asax 方法中放置我的连接字符串,而不是调用 configuration manager 的键,但它不起作用。我无法理解的是,为什么应用程序尝试连接到 127.0.0.1:10000,而我正在使用 Windows Azure。 - Florent Henry
3个回答

6
可以的,我已经复制了这段代码。您遇到的问题是云部署项目配置的问题。造成这个错的原因是我将存储连接字符串设置为指向“UseDevelopmentStorage=true”。相反,您需要使用Azure部署项目中的连接字符串工具来更改 ConfigurationManager 获取其连接字符串的位置,并为本地开发和部署到云端设置不同的连接字符串。
请按以下步骤进行操作:
1. 打开Windows Azure项目并找到Roles节点。
2. 双击WebRole项目以打开配置面板。
3. 单击Settings选项卡以显示为项目定义的所有不同设置。
4. 更改Service Configuration设置为Cloud
5. 点击StorageConnectionString设置的省略号,然后选择 Enter storage credentials
6. 保存此对话框、配置设置页面,然后返回您创建CloudStorageAccount客户端的代码。
7. 在需要获取连接字符串以创建客户端的位置上,使用下面的片段:
// Retrieve storage account from connection-string CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
这样做后,运行部署向导时,它会自动拉取Cloud设置,同时保留Local设置以在调试器中运行。如果您愿意,我很乐意加入Lync会议,帮您修复这个问题。

我已经在不同的配置中定义了我的存储凭据(我有三个配置,一个用于本地开发,一个用于测试,一个用于生产。测试和生产是两个不同的Windows Azure帐户)。我怀疑有人试图连接到本地主机,所以我尝试直接在我的应用程序中硬编码我的测试凭据并在Windows Azure上运行它,但我仍然遇到了相同的问题。 - Florent Henry
我之前是通过RoleEnvironment来访问我的设置,而不是像这样使用CloudConfigurationManager:CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("BlobConnection"));。我并不真的希望这会改变什么,但我已经尝试了你的方法来调用设置。我正在Azure上部署我的项目,如果有任何变化,我会告诉你的。 - Florent Henry
我测试的新部署仍然没有改变任何东西。我还尝试将我的测试凭据放入本地连接字符串中,而不是使用UseDevelopmentStorage=true。它可以计算,但我保存在容器中的Blob(应该在我的测试帐户Blob中)存储在存储仿真器中。我在调试模式下检查,从云设置中拉出的字符串是我的测试连接字符串。所以,我不明白为什么没有引发任何错误,以及为什么我正在保存我的Blob到另一个我想要的位置。 - Florent Henry
我认为这个问题已经到了需要查看代码才能进一步诊断的地步。关于如何做到这一点的教程非常简单明了,但在定制过程中可能出现了一些问题。你有没有可能用一个简单的代码示例来重现这个问题,或者分享一下你所写的代码?如果有帮助的话,你可以直接给我发电子邮件:chris.koenig@microsoft.com - Chris Koenig

4

好的,我弄清楚了我的错误所在。

为了抽象化,我设计了一个解决方案,在应用程序中仅使用了一次 Blob 连接。它有三个调用到 Blob 存储。

  • 一个在我的 Global.asax
  • 一个在 BlobService
  • 一个在 ExtensionMethod

我检查了几遍我的 Global.asax 和 BlobService,但忘记了 ExtensionMethod。我在项目开始时编写了它,并通过以下指令只在开发中访问 blob 账户:CloudStorageAccount.DevelopmentStorageAccount 而不是 CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("BlobConnection"))

Chris Koening 的 答案 部分正确,因为我试图访问开发存储,而我在云端。如果您遇到了这个问题,请采取以下建议:

  1. 执行 Chris 的答案
  2. 如果第一步无法解决您的问题,请尝试通过 Visual Studio 搜索工具或Agent Ransack在您的整个解决方案中查找 DevelopmentStorageAccount 字符串,并将其替换为您在第一步中定义的密钥
  3. 如果仍然无法解决您的问题,请尝试查找是否有任何对 DevelopmentStorage 的引用

1
当我尝试在本地使用Azure存储模拟器运行时,我遇到了相同的错误。它发生在调用"container.CreateIfNotExists()"时。经过长时间的挣扎,结果发现,在我的情况下,模拟器没有启动。右键单击Azure任务栏图标,然后单击“启动存储模拟器”。一旦启动,它就可以正常工作。 - newman

1

您的问题与安装在您的计算机上的组件有关,而不是与 Windows Azure 有关。我可以提供一些指针来解决这种问题,但很难确定一个具体的根本原因。

您可以直接从模板创建一个非常简单的 Web 角色应用程序,然后在 Windows Azure 模拟器中运行它,以查看是否正常工作。这样,您就可以区分您的问题是特定于您的代码还是其他方面的问题。如果您在简单的测试应用程序中遇到完全相同的问题,则您的问题更多与 Windows Azure 组件相关。

您还可以修改应用程序设置,使其在 IISExpress(默认)或 IIS Server 上运行,以查看问题行为是否有所改变。如果您在 IIS Server 和 IIS Express 中都遇到完全相同的错误,则可以将重点放在 Windows Azure 组件上,以解决问题。


我忘了提到,我已经部署了一些来自 MSDN 的实验室,并且它们运行得非常完美。 - Florent Henry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接