C# Microsoft Project联机OData异步查询
我试图通过查询C#中的数据来使用。我遇到性能问题,每次查询延迟约1秒。我尝试使用该方法一次查询2个信息:C# Microsoft Project联机OData异步查询,c#,sharepoint,sharepoint-online,project-online,C#,Sharepoint,Sharepoint Online,Project Online,我试图通过查询C#中的数据来使用。我遇到性能问题,每次查询延迟约1秒。我尝试使用该方法一次查询2个信息: public static async Task<string> ReadXml(string url) { var request = (HttpWebRequest)WebRequest.Create(url); request.Credentials = Credentials; // SharePointOnlineCre
public static async Task<string> ReadXml(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = Credentials; // SharePointOnlineCredentials
request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
using (var response = (HttpWebResponse)await request.GetResponseAsync())
using (var stream = response.GetResponseStream())
using (var reader = new System.IO.StreamReader(stream))
{
var xml = await reader.ReadToEndAsync();
return xml;
}
}
如果我先“等待”第一个,然后再执行第二个,它可以正常工作,但与上面的代码不同。这是假设项目中有<300个任务,如果超过300个,我必须以300块的形式查询它们,导致整个查询需要4到5秒,因为我不能一次全部查询它们!
有没有一种方法可以同时发送多个请求?
我可以通过简单地在多个chrome标签中输入url来实现,速度非常快/响应速度更快。我不明白为什么它不能与我的代码一起工作
谢谢,根据下面的帖子Webrequest。创建可能是问题所在,它使用了一种内部阻止方法 下面的代码使用较新的HttpClient,不应该有此问题
public static HttpClient _HttpClient { get; } = new HttpClient(new HttpClientHandler { Credentials=new NetworkCredential("","")});
public static async Task<string> ReadXml(string url)
{
using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url))
{
requestMessage.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
using (var response = await _HttpClient.SendAsync(requestMessage))
{
return await response.Content.ReadAsStringAsync();
}
}
}
publicstatichttpclient{get;}=newhttpclient(newhttpclienthandler{Credentials=newnetworkcredential(“,”)});
公共静态异步任务ReadXml(字符串url)
{
使用(var requestMessage=newhttprequestmessage(HttpMethod.Get,url))
{
requestMessage.Headers.Add(“X-FORMS_-BASED_-AUTH_-ACCEPTED”,“f”);
使用(var response=await_HttpClient.sendsync(requestMessage))
{
return wait response.Content.ReadAsStringAsync();
}
}
}
嗨!我尝试使用您的代码,但我一直收到401个未经授权的
响应。我将NetworkCredential
替换为我已经在使用的SharePointOnlineCredentials
,它给出了相同的结果。有什么想法吗?谢谢您好,我在添加标题时出错,已修复。我缺少“credential.GetAuthenticationCookie”。我在这里找到了一个半工作的示例代码:我仍然将您的答案作为接受,因为您将我发送到HttpClient跟踪。谢谢
public static HttpClient _HttpClient { get; } = new HttpClient(new HttpClientHandler { Credentials=new NetworkCredential("","")});
public static async Task<string> ReadXml(string url)
{
using (var requestMessage = new HttpRequestMessage(HttpMethod.Get, url))
{
requestMessage.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
using (var response = await _HttpClient.SendAsync(requestMessage))
{
return await response.Content.ReadAsStringAsync();
}
}
}