在我们的生产站点(这是一个 .net 4 托管的 WCF 应用程序)中,我们对产品进行了升级,现在是 .net 4(之前是 .net 3.5)。这是一个拥有超过 20 万注册用户的大型产品。 此问题是随机发生的,执行 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 之间的连接中。 目前我们只会在每次发生这种情况时重置服务器。我将不胜感激任何帮助,因为我们在这里对这个问题感到困惑。
尝试在 web.config 中将“show_sql”标志设置为 false,并将休眠日志设置为调试以外的日志。
问题是当 hibernate 尝试记录命令但无法记录某些 UTF16 字符(如某些表情符号)时。 当show_sql设置为tru时,它还会将thw kog写入srdout,这也可能会导致失败。