有時,在我的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