【发布时间】:2013-05-10 14:11:38
【问题描述】:
我收到以下异常
"检查元数据时超时;这可能表示死锁。这通常可以通过在应用程序初始化期间准备必要的序列化程序来避免,而不是允许多个线程执行初始元数据检查;另请参阅 LockContended 事件 ( System.String)"
尝试使用 protobuf.net 序列化/反序列化对象时。 我将 protobuf.net 用于 Silverlight 和 WCF 服务。在 WCF 服务上序列化结果并在客户端(Silverlight)端反序列化相同的响应。
我为此使用了扩展方法。这是代码
public static byte[] GetSerializeByteArray<T>( this T entity )
{
using ( var stream = new MemoryStream() )
{
Serializer.Serialize( stream, entity );
return stream.ToArray();
}
}
public static T DeserializeByteArray<T>( this byte[] byteArray )
{
if ( byteArray == null )
{
throw new ArgumentNullException( "byteArray" );
}
try
{
using ( Stream result = new MemoryStream( byteArray ) )
{
return Serializer.Deserialize<T>( result );
}
}
catch ( Exception )
{
throw new InvalidOperationException( "Invalid Type" );
}
}
这是我们的模型类,它驻留在其他项目(可移植类库)中,并在客户端(Silverlight)和服务器(WCF)端都使用。
[ProtoContract]
public class Class1
{
[ProtoMember( 1 )]
public string Name
}
我不明白为什么这个异常一次又一次地发生! 你能解释一下吗,这是使用protobuf-net实现的正确方法吗?
【问题讨论】:
-
这很奇怪!该模型是微不足道的 - 它应该立即解决。您能告诉我确切您使用的是哪个 dll 版本号吗?以及什么平台版本(完整的.net/可移植类库/等)。另外 - 这会发生在客户端和服务器上吗?还是只有一个?你不应该在这里做任何特别的事情。奇怪的事情正在发生!不太可能,但这里的超时实际上是可配置的 - 你有没有可能改变它?
标签: .net wcf silverlight-5.0 protobuf-net