xpマシンで、自動生成されたクライアントプロキシのメソッドを呼び出すときに例外が発生することがあります。すべてのclr例外で停止するようにデバッガーに指示しました。今時々私が次のように呼ぶとき:
public MyStuff.Entities.Package GetPackageById(System.Guid sessionId, int packageId)
{
return base.Channel.GetPackageById(sessionId, packageId);
}
最初にInvalidOperationExceptionが発生します:コレクションが変更されました... F10を押すと、次のメッセージを含むFileLoadExceptionが発生します。
ファイルまたはアセンブリ'System.Runtime.Serialization.resources、Version = 4.0.0.0、Culture = de-DE、PublicKeyToken=b77a5c561934e089'またはその依存関係の1つを読み込めませんでした。現在の状態では、操作は合法ではありません。(HRESULTからの例外:0x80131509)
FaultExceptionとして表示されるため、サービスが例外をスローしなかったと確信しています。base.Channel.GetPackageById(sessionId、packageId)を呼び出すときにスローされるのはInvalidOperationExceptionなので、直接私のせいではないと思いますか?
この例外を排除または回避するために何を試みることができるかについて、私はゆっくりとアイデアを使い果たしています。
Windows7と.NET4.5がインストールされている開発者のマシンを使用している場合は発生しませんでした。XPでは、これは約4回に1回発生します。
サービス側の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));
}
}
パッケージクラスは次のようになります。
[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;
}