Simple.odata.client 停止寻找#metadata
Simple.odata.client stops at looking for #metadata
我正在为来自 V4 oData 服务的 return 数据构建一个客户端。以下代码在 LinqPad v5 和 v6 中运行良好。但是在 Visual Studio 中实施它似乎只为 #metadata 创建 GET 请求,然后结束。
我主要是在 Windows 10 上创建它,但我也在 Mac 的 VS 中尝试过它。它运行但也只为#metadata 创建 GET。
我创建了新的、干净的项目。我已经回到使用框架 GIT 站点中最简单的请求示例。我尝试使用 .Net Core(2.2 和 3.0)、.Net Standard 和 .Net Framework 来使用新项目。
var credentials = new NetworkCredential("username", "password");
var URL = new Uri("http://servername:60080/#########.odata/");
var settings = new ODataClientSettings(URL, credentials)
{
IgnoreResourceNotFoundException = true,
OnTrace = (x, y) => Console.WriteLine(string.Format(x, y)),
PayloadFormat = ODataPayloadFormat.Json,
IgnoreUnmappedProperties = true,
RenewHttpConnection = true,
TraceFilter = ODataTrace.All,
PreferredUpdateMethod = ODataUpdateMethod.Patch
};
var client = new ODataClient(settings);
var annotations = new ODataFeedAnnotations();
IEnumerable<APPLICATIONS_RAW> packages = await client
.For<APPLICATIONS_RAW>()
.Filter(f => f.TIMEFRAME >= convertedStartOffset)
.Filter(f => f.TIMEFRAME < convertedEndOffset)
.FindEntriesAsync(annotations);
while (annotations.NextPageLink != null)
{
countPages++;
IEnumerable<APPLICATIONS_RAW> packages2 = await client
.For<APPLICATIONS_RAW>()
.FindEntriesAsync(annotations.NextPageLink, annotations);
packages = packages.Concat(packages2);
}
代码通常 return 包含以下内容(后跟数据)。
GET request: http://servername:60080/#####.odata/$metadata
Request
completed: OK
GET request: http://servername:60080/#####.odata/APPLICATIONS_RAW?$filter=...
在 Visual Studio 我得到的只是...
GET request: http://servername:60080/#####.odata/$metadata
然后自然退出。没有错误。
我觉得我缺少一些非常基本的东西,但我就是找不到。如果有人对此有一些指示,那就太棒了。
我找到了解决方案。
它不是来自 oData 请求本身。这是因为此代码要求对此代码的调用也是等待。
我一直在使用以下
await restIngest();
并通过将其更改为
解决了这个问题
restIngest.Wait();
我正在为来自 V4 oData 服务的 return 数据构建一个客户端。以下代码在 LinqPad v5 和 v6 中运行良好。但是在 Visual Studio 中实施它似乎只为 #metadata 创建 GET 请求,然后结束。
我主要是在 Windows 10 上创建它,但我也在 Mac 的 VS 中尝试过它。它运行但也只为#metadata 创建 GET。
我创建了新的、干净的项目。我已经回到使用框架 GIT 站点中最简单的请求示例。我尝试使用 .Net Core(2.2 和 3.0)、.Net Standard 和 .Net Framework 来使用新项目。
var credentials = new NetworkCredential("username", "password");
var URL = new Uri("http://servername:60080/#########.odata/");
var settings = new ODataClientSettings(URL, credentials)
{
IgnoreResourceNotFoundException = true,
OnTrace = (x, y) => Console.WriteLine(string.Format(x, y)),
PayloadFormat = ODataPayloadFormat.Json,
IgnoreUnmappedProperties = true,
RenewHttpConnection = true,
TraceFilter = ODataTrace.All,
PreferredUpdateMethod = ODataUpdateMethod.Patch
};
var client = new ODataClient(settings);
var annotations = new ODataFeedAnnotations();
IEnumerable<APPLICATIONS_RAW> packages = await client
.For<APPLICATIONS_RAW>()
.Filter(f => f.TIMEFRAME >= convertedStartOffset)
.Filter(f => f.TIMEFRAME < convertedEndOffset)
.FindEntriesAsync(annotations);
while (annotations.NextPageLink != null)
{
countPages++;
IEnumerable<APPLICATIONS_RAW> packages2 = await client
.For<APPLICATIONS_RAW>()
.FindEntriesAsync(annotations.NextPageLink, annotations);
packages = packages.Concat(packages2);
}
代码通常 return 包含以下内容(后跟数据)。
GET request: http://servername:60080/#####.odata/$metadata
Request
completed: OK
GET request: http://servername:60080/#####.odata/APPLICATIONS_RAW?$filter=...
在 Visual Studio 我得到的只是...
GET request: http://servername:60080/#####.odata/$metadata
然后自然退出。没有错误。 我觉得我缺少一些非常基本的东西,但我就是找不到。如果有人对此有一些指示,那就太棒了。
我找到了解决方案。 它不是来自 oData 请求本身。这是因为此代码要求对此代码的调用也是等待。 我一直在使用以下
await restIngest();
并通过将其更改为
解决了这个问题restIngest.Wait();