有时,在我的xp机器上,在自动生成的客户端代理中调用方法时会出现异常。我告诉调试器停止所有clr异常。 现在有时我打电话给以下人员:
public MyStuff.Entities.Package GetPackageById(System.Guid sessionId, int packageId)
{
return base.Channel.GetPackageById(sessionId, packageId);
}
我首先得到一个InvalidOperationException:Collection被修改了...... 按F10会导致FileLoadException,其中包含以下内容:
无法加载文件或程序集'System.Runtime.Serialization.resources,Version = 4.0.0.0,Culture = de-DE,PublicKeyToken = b77a5c561934e089'或其依赖项之一。 当前状态下的操作不合法。(HRESULT异常:0x80131509)
我确信该服务没有抛出异常,因为它会显示为FaultException。因为在调用 base.Channel.GetPackageById(sessionId,packageId)时抛出了 InvalidOperationException ,我认为这不是我的错?
我正在慢慢耗尽我可以尝试消除或解决此异常的想法。
使用安装了Windows 7和.NET 4.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));
}
}
Package Class如下所示:
[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;
}
答案 0 :(得分:2)
这不仅仅是一个实验,但是太大了,无法作为评论!
尝试创建执行此代码的新操作合同:
<强>服务强>
public Package GetPackageByIdTest(Guid sessionId, int packageId)
{
return new Package { ProductId = packageId, OutDate = DateTime.Now };
}
然后创建一个引用您的服务的控制台应用程序并编写如下内容:
<强>客户端:强>
static void Main(string[] args)
{
for (int tester = 0; tester < 2000; tester++)
{
using (var service = new ConsoleApplication1.ServiceReference1.Service1Client())
{
Package result = service.GetPackageByIdTest(Guid.NewGuid(), tester);
Console.WriteLine(result.ProductId);
}
}
Console.ReadKey();
return;
}
然后,尝试在其中一台失败的已知XP机器上运行它,看看是否遇到同样的问题。如果不是,则表明您的DataProvider.Provider.GetPackagesByKey(...)
方法中存在遗漏。