Silverlight 在行为中抛出错误并将其返回给客户端
我正在用WCF编写一些服务,由Silverlight客户端调用。每次通过IDispatchMessageInspector返回故障时,我都会将状态代码更改为200 它工作得几乎完美,但有时它会不断返回错误500:NotFound 我刚刚编写了另一个IDispatchMessageInspector来提交ObjectContext中的更改。但如果失败,则不会调用错误处理程序 我认为当UnitOfWorkMessageInspector运行时,消息已经被设置为非故障响应。我怎样才能做到这两件事Silverlight 在行为中抛出错误并将其返回给客户端,silverlight,wcf,entity-framework,fault,wcf-behaviour,Silverlight,Wcf,Entity Framework,Fault,Wcf Behaviour,我正在用WCF编写一些服务,由Silverlight客户端调用。每次通过IDispatchMessageInspector返回故障时,我都会将状态代码更改为200 它工作得几乎完美,但有时它会不断返回错误500:NotFound 我刚刚编写了另一个IDispatchMessageInspector来提交ObjectContext中的更改。但如果失败,则不会调用错误处理程序 我认为当UnitOfWorkMessageInspector运行时,消息已经被设置为非故障响应。我怎样才能做到这两件事
public class UnitOfWorkMessageInspector : IDispatchMessageInspector
{
public void BeforeSendReply(ref Message reply, object correlationState)
{
if (!reply.IsFault)
{
try
{
UnitOfWorkBase.Commit();
}
catch (OptimisticConcurrencyException)
{
throw new FaultException("It was changed by another user. Try again.");
}
}
}
代码500是内部错误 发生了一些错误,服务器端未捕获到该错误
在您的代码中,您只捕获OptimisticConcurrencyException,您还需要捕获异常。我设法使它工作。我发现我的IDispatchMessageInspector无法从状态代码500切换到200,因为消息已经生成,然后我替换了消息
public class UnitOfWorkMessageInspector : IDispatchMessageInspector
{
public void BeforeSendReply(ref Message reply, object correlationState)
{
if (!reply.IsFault)
{
try
{
UnitOfWorkBase.Commit();
}
catch (OptimisticConcurrencyException)
{
FaultException fe = new FaultException("It was changed by another user. Try again.");
reply = Message.CreateMessage(reply.Version, fe.CreateMessageFault(), fe.Action);
}
}
}
我通过IDispatchMessageInspector捕获所有异常,并在出现故障时将状态代码更改为200。当异常在另一个IDispatchMessageInspector中引发时,它不起作用。如果故障仅发生在BeforeSendReply中,如何将状态代码从500更改为200?您需要检查所有代码,并检查IDispatchMessageInspector和catch块中是否存在任何未捕获的异常。