我尝试使用云服务和Azure SDK 2.9将演示应用程序发布到Windows Azure。在我的服务中,我有一个Web角色和一个Worker角色。两者都使用Azure存储。在本地主机(Emulator)上一切都很好,但当我尝试发布应用程序时,我在Web角色上遇到以下错误:
未处理的异常:System.Runtime.Serialization.Serialization异常,
详细信息:异常:找不到程序集"Microsoft.WindowsAzure.Storage,版本=7.0.0.0,区域性=中性,PublicKeyToken=31bf385)
在Worker Role项目中一切正常,它也在使用Storage。
我试图将Web角色转换为标准的Web应用程序,一切都很好,但我想在云应用程序上解决这个问题。
我尝试过的:
- 将引用中的本地副本设置为true
- 将.Net Framework更改为4.5.1和4.6(默认为4.5)
- 删除并再次添加对存储的引用
- 通过nuget重新安装所有库
- 随Storage 7.0和6.2一起发布
- 由VS和门户网站发布(包)
- 已将dependentAssembly添加到web.config
在我的虚拟机上,我检查了bin文件夹Microsoft.WindowsAzure.Storage是否存在。
有什么想法吗?
两天后,我找到了这个问题的解决方案。在我的WebRole.cs中,我有这样的:
public override bool OnStart()
{
var csa = CloudStorageAccount.Parse(RoleEnvironment
.GetConfigurationSettingValue("Credentials"));
var cqc = csa.CreateCloudQueueClient();
var inputQueue = cqc.GetQueueReference("inputqueue");
inputQueue.CreateIfNotExists();
var outputQueue = cqc.GetQueueReference("outputqueue");
outputQueue.CreateIfNotExists();
var ctc = csa.CreateCloudTableClient();
var ct = ctc.GetTableReference("last");
ct.CreateIfNotExists();
return base.OnStart();
}
当我把这个初始化移到其他地方,例如RouteConfig.cs时,一切都很完美。我不知道为什么,但WebRole中对存储的每次引用在发布到Azure后都会引发错误。我希望这个解决方案能有所帮助。