首先 - 我已经尝试了其他线程中给出的有关此问题的所有解决方案。到目前为止还没有解决我的问题。
我们的客户一直在运行文件共享作为默认的 blob 提供程序,但要使其完全正常工作存在一些问题,因此他们一直在做一些解决方案。他们希望将其移动到 Azure 存储。我们已经按照指南设置了存储帐户和容器。
我设法使用 AzCopy 将所有 blob 复制到我想要使用的容器中。但一旦我将其引入到我的 web.config 中,它就会崩溃并给我一个 400 响应。
<blob defaultProvider="azureblobs">
<providers>
<add name="azureblobs" type="EPiServer.Azure.Blobs.AzureBlobProvider,EPiServer.Azure" connectionStringName="EPiServerAzureBlobs" container="mycontainer" />
</providers>
</blob>
<add name="EPiServerAzureBlobs" connectionString="DefaultEndpointsProtocol=https;AccountName=xxxxxxx;AccountKey=xxxxxxx==;EndpointSuffix=core.windows.net"/>
抛出的异常如下:
One or more errors occurred.
at System.Threading.Tasks.Task.WaitAll(Task[] tasks, Int32 millisecondsTimeout, CancellationToken cancellationToken)
at EPiServer.Framework.FrameworkInitialization.<>c__DisplayClass2_0.<InitializeBlobProviders>b__0(Object o, EventArgs e)
The remote server returned an error: (400) Bad Request.
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604
at EPiServer.Azure.Blobs.DefaultAzureBlobContainer.CreateIfNotExist()
at System.Threading.Tasks.Task.Execute()
The remote server returned an error: (400) Bad Request.
at System.Net.HttpWebRequest.GetResponse()
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 677
我们正在 .NET Framework 4.6.1 和 EPiServer.CMS v.11.20.14 上运行,这意味着 Azure 的一些较新软件包将无法工作,因此我目前使用 EPiServer.Azure v.9.4.4 和 WindowsAzure .存储8.5.0。我知道已经对该软件包进行了拆分,但安装单独的软件包并没有解决问题。有什么线索可能导致这种情况吗?谢谢!
仍然不确定是什么导致了问题,但我想分享我的解决方案。
因此,将目标框架更新到 4.6.2 可以将某些软件包(包括 EPiServer.Azure)更新到 10.0.1。我还能够更深入地研究问题并发现一个内部异常:“WebForms UnobtrusiveValidationMode 需要 'jquery' 的 ScriptResourceMapping。请在页面加载时添加名为 jquery(区分大小写)的 ScriptResourceMapping”。因此,将其添加到我的 webconfig 中可以使网站恢复正常:
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
为了让 blob 正常工作,我使用 AzCopy 从本地目录到容器创建了一个新副本,将它们直接放在容器下,而不是放在子目录中。之后,我从 EPiCode.BlobConverter nuget 运行 BlobConverter-job,它终于按照我想要的方式运行了。