有时,在我的xp机器上,在我自动生成的客户端代理中调用方法时会出现异常。我告诉调试器停止所有clr异常。 现在有时当我打电话以下几点:在wcf客户端代理中调用方法时的偶然异常
public MyStuff.Entities.Package GetPackageById(System.Guid sessionId, int packageId)
{
return base.Channel.GetPackageById(sessionId, packageId);
}
我第一次得到一个InvalidOperationException:集合已修改...... 按F10导致FileLoadException用下面的messge:
无法加载文件或组件'System.Runtime.Serialization.resources,Version = 4.0.0.0,Culture = de-DE,PublicKeyToken = b77a5c561934e089'或它的一个依赖关系。 在当前状态下操作不合法。(来自HRESULT的例外:0x80131509)
我确定该服务没有抛出异常,因为它会显示为FaultException。因为它是InvalidOperationException当调用时引发base.Channel.GetPackageById(sessionId,packageId)我认为这不是直接的问题吗?
我慢慢地想出了什么,我可以尝试消除或解决此异常。
使用安装了Windows 7和.NET 4.5的开发人员机器时,它从未发生过。在XP上,这大约会发生四次中的一次。在服务端
GetPackageById看起来是这样的:
public Package GetPackageById(Guid sessionId, int packageId)
{
try
{
return DataProvider.Provider.GetPackagesByKey(packageId,null);
}
catch (Exception ex)
{
throw new FaultException<MySericeFault>(new MySericeFault(ex));
}
}
Package类看起来是这样的:
[DataContract(IsReference = true)]
[KnownType(typeof(MyApp.Entities.MachinePackage))]
public partial class Package: INotifyPropertyChanged
{
private DateTime? _outDate;
[DataMember]
public DateTime? OutDate
{
get { return _outDate; }
set
{
if (_outDate != value)
{
_outDate = value;
OnPropertyChanged("OutDate");
}
}
}
private int _productId;
[DataMember]
public int ProductId
{
get { return _productId; }
set
{
if (_productId != value)
{
_productId = value;
OnPropertyChanged("ProductId");
}
}
}
protected virtual void OnPropertyChanged(String propertyName)
{
if (_propertyChanged != null)
{
_propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { _propertyChanged += value; }
remove { _propertyChanged -= value; }
}
private event PropertyChangedEventHandler _propertyChanged;
}
听起来好像WCF连接异常终止,可能是被序列化的对象失败。你有代码显示对象被序列化,所以我们可以检查属性等。通常循环引用可能会导致这种类型的问题。 – Belogix 2013-02-19 14:47:50
如何关闭与服务的连接?当你得到第一个异常时,这是如何处理的?我认为你需要发布模式代码得到答案死! – Jocke 2013-02-19 14:48:16
正如第一句中所写,它是用svcutil()自动生成的。NET 4) – 2013-02-19 14:48:48