我从WP7应用程序使用WCF服务。两者都在一个VS解决方案中。一切工作正常,直到我试图传回一个FaultException。使用FaultException的未处理异常<T>与WCF和WP7应用程序
当从我的WCF服务抛出的FaultException,我收到“类型的未处理的异常‘System.ServiceModel.FaultException`1’发生在System.ServiceModel.dll”在EndInvoke会在我的代理消息。如果我继续下去,这个例外不会冒出来。我的处理程序代码从未被击中。
我相信我已经正确连线了所有东西。我见过很多例子,因为我花了整整一天的时间在网上搜寻这个问题的帮助。如果我停止抛出FaultException,我的应用程序工作正常。
在VS调试>例外对话框中,我尝试在CLR/System.ServiceModel下禁用FaultException和FaultException'1。我也试过去工具>选项,Debuggung>常规,并关闭“启用异常助手”和“启用只是我的代码(只管理)。这些都没有启用异常冒泡到我的调用方法在应用程序。
接口码 -
[OperationContract]
[FaultContract(typeof(NotAuthorizedException))]
List<MyResult> GetValues(DateTime beginDate, DateTime endDate);
异常类型 -
[DataContract]
public class NotAuthorizedException
{
[DataMember]
public string Message { get; set; }
}
Server代码抛出异常 -
throw new FaultException<NotAuthorizedException>(
new NotAuthorizedException(),
new FaultReason("Not authorized."),
new FaultCode("Sender"));
客户端调用WCF服务 -
try
{
MyServiceClient myService = new MyServiceClient();
myService.GetValuesCompleted += new EventHandler<GetValuesCompletedEventArgs>(myService_GetValuesCompleted);
myService.GetValuesAsync(DateTime.Now, DateTime.Now.AddMonths(6));
}
catch (FaultException<NotAuthorizedException>)
{
//handle error here
}
如果它打破(在Reference.cs) -
System.Collections.ObjectModel.ObservableCollection<Namespace.MyService.MyResult> _result = ((System.Collections.ObjectModel.ObservableCollection<Namespace.MyService.MyResult>)(base.EndInvoke("GetValues", _args, result)));
从 “添加服务引用” 菜单生成的代理代码的代码不变项目。
它必须是简单的东西,但我只是没有看到它!
愚蠢的我,做到了!不习惯异步调用服务。谢谢! – 2010-12-02 16:52:22