在我们的生产站点(这是一个.net 4托管的WCF应用程序)中,我们对我们的产品进行了升级,现在是.net 4(之前是.net 3.5)。这是一个大型产品,生产中有超过200,000注册用户。这个问题随机发生,在执行iisreset后会消失。
我在网上找到了一些网页但没有解决这个问题的方法。
我们看到以下错误:
System.Text.EncoderFallbackException: Unable to translate Unicode character \uD83D at index -1 to specified code page.
at System.Text.EncoderExceptionFallbackBuffer.Fallback(Char charUnknown, Int32 index)
at System.Text.EncoderFallbackBuffer.InternalFallback(Char ch, Char*& chars)
at System.Text.UTF8Encoding.GetBytes(Char* chars, Int32 charCount, Byte* bytes, Int32 byteCount, EncoderNLS baseEncoder)
at System.Text.EncoderNLS.GetBytes(Char[] chars, Int32 charIndex, Int32 charCount, Byte[] bytes, Int32 byteIndex, Boolean flush)
at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
at System.IO.TextWriter.WriteLine(String value)
at System.IO.TextWriter.SyncTextWriter.WriteLine(String value)
at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\AdoNet\AbstractBatcher.cs:line 239
at NHibernate.Driver.BatcherDataReaderWrapper..ctor(IBatcher batcher, IDbCommand command) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Driver\BasicResultSetsCommand.cs:line 99
at NHibernate.Driver.BasicResultSetsCommand.GetReader(Nullable`1 commandTimeout) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Driver\BasicResultSetsCommand.cs:line 54
at NHibernate.Impl.MultiCriteriaImpl.GetResultsFromDatabase(IList results) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiCriteriaImpl.cs:line 199
2013-08-26 22:52:56,333 [87] *ERROR* NHibernate.Util.ADOExceptionReporter.LogExceptions() -> Unable to translate Unicode character \uD83D at index -1 to specified code page.
似乎这种情况发生在NHibernate和DB之间的连接中。 目前我们只是在每次发生这种情况时重置服务器。我很感激任何帮助,因为我们对这个问题感到困惑。
答案 0 :(得分:1)
尝试在web.config中将“show_sql”标志设置为false,并将hibernate日志变为调试以外的其他日志。
问题是当hibernate尝试记录命令但是在记录某些UTF16 charachter(如某些表情符号)时失败。 当show_sql设置为tru时,它也会将thog写入srdout,这也可能导致失败。