3

在我们的生产站点(这是一个 .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 之间的连接中。目前我们只在每次发生这种情况时重置服务器。我将不胜感激任何帮助,因为我们在这里对这个问题感到困惑。

4

1 回答 1

3

尝试在您的 web.config 中将“show_sql”标志设置为 false,并将休眠日志设置为除调试之外的其他内容。

问题是当休眠尝试记录命令但在记录一些 UTF16 字符(如一些表情符号)时失败。当 show_sql 设置为 tru 时,它也会将 thw kog 写入 srdout,这也可能导致失败。

于 2013-08-29T20:31:37.643 回答