遵循有关如何在 IIS 上为 Umbraco 设置负载平衡的官方文档后,我选择了带有文件复制的文件存储的推荐选项。
我在 config/umbracoSettings.config....中设置了distributedCall 元素。
<distributedCall enable="true">
<user>0</user>
<servers>
<server>ourserver-node1</server>
<server>ourserver-node2</server>
</servers>
</distributedCall>
但是每当我发布内容时它都会失败,并且我在日志中得到以下信息......
2013-10-01 17:42:34,054 [12] INFO Umbraco.Core.Publishing.PublishingStrategy - [Thread 23] Content 'testing page' with Id '1215' has been published.
2013-10-01 17:42:34,101 [12] INFO Umbraco.Core.Sync.DefaultServerMessenger - [Thread 23] Submitting calls to distributed servers
2013-10-01 17:42:34,179 [12] ERROR Umbraco.Core.Sync.DefaultServerMessenger - [Thread 23] Error refreshing a node in the distributed list, URI attempted: http://ourserver-node1/umbraco/webservices/cacheRefresher.asmx
System.Net.WebException: The request failed with HTTP status 401: Unauthorized.
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.EndInvoke(IAsyncResult asyncResult)
at Umbraco.Core.Sync.DefaultServerMessenger.PerformDistributedCall(IEnumerable`1 servers, ICacheRefresher refresher, MessageType dispatchType, IEnumerable`1 ids, Type idArrayType, String jsonPayload)
配置了 2 个节点,每个节点都有一个条目。我们为两台服务器使用相同的应用程序池标识。
整个 umbraco 网站都配置为使用 Windows 身份验证,因为它是一个通过其活动目录帐户识别文章评论的 Intranet 应用程序。
如果我在 webservices 目录上删除 windows 身份验证并允许匿名,则会导致整个 umbraco 后端 cms 失败(对 webservices 目录中服务的所有调用都失败,例如节点内容加载器等。)
从堆栈跟踪看来,用户无法通过身份验证。
我检查了机器钥匙,两者都是一样的。
为什么我仍然会在未经授权的情况下收到 401?
我可以通过我的浏览器访问 cacheRefresher.asmx,但它通过 fiddler 失败并带有相同的 401。所以我在通过浏览器时使用我的 Windows 凭据来收集它。