使用OData / SC Orchestrator时,ArgumentOutOfRangeException(应用偏移时表示的UTC时间必须介于0到10,000之间。)

时间:2016-04-19 04:50:32

标签: c#

我正在编写一个小型Web界面,它位于System Center Orchestrator设置的前面。它应该会击中Runbook并获得一些数据 - 这部分在很大程度上并不重要。

代码正试图启动一个Runbook作业,使用https://msdn.microsoft.com/en-us/library/hh921685.aspx

中的示例代码(并根据我的要求进行修改)来获取一些数据

我改变的唯一行是对我自己的Orchestrator,Runbook GUID和Runbook参数的引用。

此行抛出标题中的异常:

context.SaveChanges();

这个显示错误的堆栈跟踪似乎是在OData领域的某个地方产生的,远远超出了我的代码:

[ArgumentOutOfRangeException: The UTC time represented when the offset is applied must be between year 0 and 10,000.
Parameter name: offset]
   System.DateTimeOffset.ValidateDate(DateTime dateTime, TimeSpan offset) +14215620
   System.DateTimeOffset..ctor(DateTime dateTime) +56
   Microsoft.Data.OData.Atom.EpmSyndicationWriter.CreateDateTimeStringValue(Object propertyValue, ODataWriterBehavior writerBehavior) +144
   Microsoft.Data.OData.Atom.EpmSyndicationWriter.WriteEntryEpm(EntryPropertiesValueCache epmValueCache, IEdmEntityTypeReference entityType) +652
   Microsoft.Data.OData.Atom.EpmSyndicationWriter.WriteEntryEpm(EpmTargetTree epmTargetTree, EntryPropertiesValueCache epmValueCache, IEdmEntityTypeReference type, ODataAtomOutputContext atomOutputContext) +80
   Microsoft.Data.OData.Atom.ODataAtomWriter.EndEntry(ODataEntry entry) +627
   Microsoft.Data.OData.ODataWriterCore.<WriteEndImplementation>b__16() +168
   Microsoft.Data.OData.ODataWriterCore.InterceptException(Action action) +121
   Microsoft.Data.OData.ODataWriterCore.WriteEndImplementation() +69
   Microsoft.Data.OData.ODataWriterCore.WriteEnd() +40
   System.Data.Services.Client.ODataWriterWrapper.WriteEnd(ODataEntry entry, Object entity) +47
   System.Data.Services.Client.Serializer.WriteEntry(EntityDescriptor entityDescriptor, IEnumerable`1 relatedLinks, ODataRequestMessageWrapper requestMessage) +485
   System.Data.Services.Client.BaseSaveResult.CreateRequestData(EntityDescriptor entityDescriptor, ODataRequestMessageWrapper requestMessage) +117
   System.Data.Services.Client.BaseSaveResult.CreateChangeData(Int32 index, ODataRequestMessageWrapper requestMessage) +136
   System.Data.Services.Client.SaveResult.CreateNonBatchChangeData(Int32 index, ODataRequestMessageWrapper requestMessage) +224
   System.Data.Services.Client.SaveResult.CreateNextChange() +174
   System.Data.Services.Client.DataServiceContext.SaveChanges(SaveChangesOptions options) +178
   System.Data.Services.Client.DataServiceContext.SaveChanges() +37
   S3Tools.RunbookOperations.GetClusters(String site) in [redacted]\RunbookOps.cs:58

我查看了The UTC time represented when the offset is applied must be between year 0 and 10,000. Parameter name: offsetUTC time represented when the offset is applied must be between year 0 and 10,000 error,看起来很可疑,就像调用https://support.microsoft.com/en-us/kb/2346777的错误(特别是后者)一样,但MS提供的修补程序不适用于Windows 10(我的工作站)或Windows 2012 R2(网络服务器)。

我不愿意改变我的时区(UTC + 10)或服务器进行测试,然后才能看到是否有任何想法或之前遇到过这个想法。

我有PowerShell脚本,它们能够生成这些作业(尽管它们不能使用服务引用来手动生成请求)。所以除了CLR之外,我不会相信任何事情都有问题。

底线问题:有没有人遇到过这个问题并修好了?

1 个答案:

答案 0 :(得分:1)

添加这两行可以缓解这个问题:

Dim rngCell as Word.Range
Set rngCell = tbl.Cell(nRow, 2).Range
With rngCell
  'Go into the cell, rather than the entire cell
  .Collapse wdCollapseStart
  'other stuff
  .Text = captionStr & vbCr
  .Font.Bold = True
  'Move to the end of the range
  .Collapse wdCollapseEnd
  'Doing this in a table cell moves to the next cell, so one back
  .MoveEnd wdCharacter, -1
  'Now the rest of the content
  .Text = bodyStr
  .Font.Bold = False
End With

当然,或者任何合理有效的DateTime值。

所以似乎在使用问题中提到的示例代码时,空Job对象不会填充CreationTime或LastModifiedTime属性,因此它会通过它。当在计算中使用时间时,它们导致的时间跨度<1。 0或&gt;一万年。

解决方案是在这个technet论坛帖子中:https://social.technet.microsoft.com/Forums/en-US/e248ecef-9561-4409-8a3f-8299bcc721a4/exception-using-code-sample-in-utc-1-timezone?forum=scoqik

以JoakimJohansson的回答。