从运行在Azure上的Worker角色服务访问Sharepoint
本文关键字:角色 服务 访问 Sharepoint Worker 上的 运行 Azure | 更新日期: 2023-09-27 18:14:36
当其他系统中的一些信息发生变化时,我需要更新Sharepoint上的一些信息。我这样做的方式(我没有选择,而是公司)是:
1. 当事件在其他系统中发生时,我向Azure ServiceBus队列发送消息:
QueueClient queueClient = QueueClient.CreateFromConnectionString(connectionString, "authors");
BrokeredMessage message = new BrokeredMessage();
message.ContentType = "Authors";
message.Properties["FirstName"] = FirstName;
// set other properties
try {
queueClient.Send(message);
}
catch (Exception e) {
Logger.Error("Authors Windows Azure notification service fail.", e);
}
finally {
queueClient.Close();
}
这部分工作正常。
2. 我创建了一个WorkerRole来读取ServiceBus,处理消息,并在Sharepoint中发布信息(我简化了实际代码):
BrokeredMessage receivedMessage = Client.Receive(TimeSpan.FromSeconds(10));
if (receivedMessage != null && receivedMessage.ContentType == "Authors")
{
Uri uri = new Uri(CloudConfigurationManager.GetSetting("Sharepoint.Uri"));
Office365ClaimsHelper claimsHelper = new Office365ClaimsHelper(uri, CloudConfigurationManager.GetSetting("Sharepoint.User"), CloudConfigurationManager.GetSetting("Sharepoint.Password"));
using (ClientContext context = new ClientContext(uri))
{
context.ExecutingWebRequest += claimsHelper.clientContext_ExecutingWebRequest;
AuthorWrapper author = GetAuthorFromMessage(receivedMessage);
string title = CloudConfigurationManager.GetSetting("Sharepoint.ListName");
List authorsList = context.Web.Lists.GetByTitle(title);
context.Load(authorsList);
context.ExecuteQuery(); // THIS LINE
// do some other stuff, including adding the author to the list
}
receivedMessage.Complete();
}
当我在本地运行WorkerRole(使用Microsoft Azure Emulator)时,一切都运行得很好,并且信息在Sharepoint中得到了更新。
然而,当我在Azure中发布WorkerRole时,它没有工作(它从ServiceBus读取消息,但没有更新Sharepoint)。我用它来调试在Azure中运行的Worker角色,我发现当我试图从Sharepoint检索列表时,出现了403 Forbidden异常(参见注释行"this line")。这是完全相同的代码,在本地运行工作正常,在Azure中运行会引发此异常!
注意:Office365ClaimsHelper类来自github
我已经尝试过了,但这不是我的情况(我使用云服务而不是虚拟机)。WorkerRole的目标是。net 4.0(同样,不是我的选择)
我试着把最重要的代码,但如果你需要更多的东西让我知道,提前感谢!
所以这个问题的关键是当你点击Sharepoint O365时得到一个403。http://www.checkupdown.com/status/E403.html告诉我们HTTP 403错误指示(我的重点):
Web服务器(运行Web站点)认为HTTP数据流由客户端(例如您的Web浏览器)发送的是正确的,但是访问URL 标识的资源是错误的.
这表示基本访问问题,这可能很难解析,因为HTTP协议允许Web服务器提供这个没有提供任何理由的回应。403错误是相当于Web服务器的一个"NO",没有其他内容讨论允许的。
虽然你的代码(二进制)可能在你的本地开发机器和云服务中是相同的,你的配置可能不一样。
因此,您是否可以检查在云服务的 servicecconfiguration . local中是否具有相同的配置值?cscfg和 servicecconfiguration . cloud。cscfg,特别是Sharepoint。Uri和Sharepoint。ListName 值。