当另一个系统中的某些信息发生变化时,我需要更新有关Sharepoint的一些信息。我这样做的方式(我没有选择,而是选择公司)是:
1.当事件发生在另一个系统中时,我将消息发送到Azure ServiceBus队列:
pkg1
这部分工作正常 2.我创建了一个WorkerRole来读取ServiceBus,处理消息,并在Sharepoint中发布信息(我简化了实际代码):
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();
}
当我在本地运行WorkerRole(使用Microsoft Azure模拟器)时,一切都运行良好,信息在Sharepoint中更新。
但是,当我在Azure中发布WorkerRole时,它没有工作(它从ServiceBus读取消息,但没有更新Sharepoint)。我使用this调试在Azure中运行的Worker角色,当我尝试从Sharepoint检索列表时,我发现403 Forbidden异常上升(请参阅注释行" THIS LINE& #34)
。
它是完全相同的代码,在本地运行正常,在Azure中运行引发了这个异常!
注意:Office365ClaimsHelper类来自github
我已经尝试了this,但这不是我的情况(我使用云服务而不是虚拟机)。
WorkerRole的目标是.Net 4.0(再次,不是我的选择)
我试图提出最重要的代码,但如果您需要更多信息,请提前告知我们,谢谢!
答案 0 :(得分:1)
所以这个问题的症结在于你在击中Sharepoint O365时获得了403。 http://www.checkupdown.com/status/E403.html告诉我们HTTP 403错误表明(我的重点):
Web服务器(运行Web站点)认为HTTP数据流 由客户端发送(例如您的Web浏览器) 是正确的,但访问URL 标识的资源是 因某种原因被禁止。
这表示基本访问问题,这可能很难 解决因为HTTP协议允许Web服务器提供此功能 没有提供任何理由的回应。所以403错误是 相当于毯子' NO'由Web服务器 - 没有进一步 允许讨论。
虽然您的本地开发计算机和Cloud Service中的代码(二进制文件)可能相同,但您的配置可能不一样。
因此,您是否可以检查Cloud Service的 ServiceConfiguration.Local.cscfg 和 ServiceConfiguration.Cloud.cscfg 中的配置值是否相同,特别是 Sharepoint.Uri 和 Sharepoint.ListName 值。