1

我們在Windows Server 2008 r2標準的生產服務器中安裝了Windows服務,並在其中安裝了.NET Framework 4.5.2版。.Net Windows Service與MSVCR120_CLR0400.dll異常崩潰

事件ID:1026,.NET運行時異常:

Application: XXX.Application.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.AccessViolationException 
Stack: 
    at System.Buffer.__Memcpy(Byte*, Byte*, Int32) 
    at System.Buffer.__Memcpy(Byte*, Byte*, Int32) 
    at System.Buffer._Memcpy(Byte*, Byte*, Int32) 
    at System.Buffer.Memcpy(Byte*, Byte*, Int32) 
    at System.String.ToCharArray() 
    at FluentValidation.Internal.Extensions+<>c__DisplayClassd`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].<CoerceToNonGeneric>b__c(System.Object) 
    at FluentValidation.Validators.PropertyValidatorContext.get_PropertyValue() 
    at FluentValidation.Validators.AbstractComparisonValidator.IsValid(FluentValidation.Validators.PropertyValidatorContext) 
    at FluentValidation.Validators.PropertyValidator.Validate(FluentValidation.Validators.PropertyValidatorContext) 
    at FluentValidation.Internal.PropertyRule+<Validate>d__8.MoveNext() 
    at System.Linq.Enumerable+<SelectManyIterator>d__14`2[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].MoveNext() 
    at System.Collections.Generic.List`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]..ctor(System.Collections.Generic.IEnumerable`1<System.__Canon>) 
    at System.Linq.Enumerable.ToList[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.Collections.Generic.IEnumerable`1<System.__Canon>) 
    at FluentValidation.AbstractValidator`1[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Validate(FluentValidation.ValidationContext`1<System.__Canon>) 

事件ID:1000

Faulting application name: XX.Application.exe, version: 2.1.0.5017, time stamp: 0x59b1865e 
Faulting module name: MSVCR120_CLR0400.dll, version: 12.0.51209.34209, time stamp: 0x5348a2f4 
Exception code: 0xc0000005 
Fault offset: 0x0000000000001630 
Faulting process id: 0x12a8 
Faulting application start time: 0x01d3307a3a9dca66 
Faulting application path: XX.Application.exe 
Faulting module path: C:\Windows\system32\MSVCR120_CLR0400.dll 
Report Id: 5ea7c0b6-a0f0-11e7-8d71-0050568c317d 
服務的最後一個星期以下的事件查看器源異常停止兩次突然

我已經搜索了一個星期,但無法得到任何答案。 你能幫我解一下我們的Windows服務有什麼問題,或者我該怎麼做才能找到問題? 謝謝。

回答

-2

你的代碼可能與Enumerables不正確處理。爲了找到問題的根源,我建議訂閱unhanded異常,並儘可能多的細節寫的,你可以到日誌:

public static void Start() { 
AppDomain currentDomain = AppDomain.CurrentDomain; 
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 
running = true; 
ThreadStart ts = new ThreadStart(ServiceThreadBody); 
thread = new Thread(ts); 
thread.Name = "ServiceThread"; 
thread.Priority = ThreadPriority.BelowNormal; 
thread.Start(); 
} 
0

我張貼了這個問題之後,我們意識到,我們已經我們以前編譯的x86運行平臺代碼的TeamCity發佈代碼到服務器。在發佈之後,發生了這個問題。但是我們應該用x64平臺完成這個發佈,因爲我們的服務器是64位的。 在意識到這一點之後,我們再次從Visual Studio中發佈發佈包,並設置了發佈模式和混合平臺。

兩週來,問題再也沒有發生過,所以我想分享這個解決方案。總之,這是因爲我們的發佈包的運行平臺混亂。如果你遇到過這個問題,可能你應該檢查你的發佈包運行平臺。