从运行在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(同样,不是我的选择)

我试着把最重要的代码,但如果你需要更多的东西让我知道,提前感谢!

从运行在Azure上的Worker角色服务访问Sharepoint

所以这个问题的关键是当你点击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。UriSharepoint。ListName 值。