我看到System.Net.Sockets。SocketException: Connection reset by peer error从Microsoft.Graph.dll中调用TransitiveMemberOf方法检索组。
public async Task<List<AdGroup>> GetAllGroupsByUserId(string userId, CancellationToken token)
{
_client = GraphConnection.GetGraphClient(_config);
var memberships = new List<AdGroup>();
try
{
IUserTransitiveMemberOfCollectionWithReferencesRequest? next = null;
do
{
IUserTransitiveMemberOfCollectionWithReferencesPage data;
if (next == null)
{
var id = Guid.NewGuid().ToString();
var options = new List<Option>()
{
new QueryOption("$top", "999"),
new HeaderOption("client-request-id", id)
};
data = await _client.Users[userId].TransitiveMemberOf.Request(options).Select("id,displayName").GetAsync(token);
}
else
{
data = await next.GetAsync(token);
}
next = data.NextPageRequest;
if (data.CurrentPage.Count == 0)
break;
var foundGroups = data.CurrentPage
.Select(i =>
{
if (i is Group group)
return new AdGroup()
{
Id = group.Id,
Name = string.IsNullOrWhiteSpace(group.DisplayName) ? group.AdditionalData?["displayName"].ToString() ?? "" : group.DisplayName
};
if (i is DirectoryRole role)
return new AdGroup()
{
Id = role.Id,
Name = string.IsNullOrWhiteSpace(role.DisplayName) ? role.AdditionalData?["displayName"].ToString() ?? "" : role.DisplayName
};
return null;
})
.Where(g => g != null && Constants.CONTAINS_LIST.Any(c => g.Name.Contains(c, StringComparison.InvariantCultureIgnoreCase)));
if (foundGroups != null)
memberships.AddRange(foundGroups);
} while (next != null);
}
catch (Exception e)
{
_logger.LogError(e, "GetAllGroupsByUserId error");
}
return memberships;
}
我试图从Azure VM(我有Linux操作系统)以及从我的本地机器(Windows操作系统)运行代码。现在我正在检查VM的负载,因为代码是在线程中运行的,并考虑什么可能是错误的。
我还在Azure Portal中创建了一个票证,我从微软获得了以下答案:
此错误不是来自Microsoft Graph而是来自您的客户端Socket(否则意味着网络错误)
对于这些错误,您必须从您的网络团队开始调查。可能有很多人际关系的原因,比如你的防火墙,代理,负载均衡器,网络带宽限制。
那个答案对我没有多大帮助,但我正试着进一步调查。
我将感激任何帮助,谢谢
如果有人遇到类似的问题,我发布了帮助我解决问题的信息:
- 将虚拟机的核数从4增加到16
- 将正在调用MS Graph和一些逻辑的任务数量从200减少到100
- 在GetAllGroupsByUserId方法的每次迭代中初始化一个新的MS Graph客户端