1

我正在 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.");
                }
            }
        }
4

2 回答 2

0

代码 500 是内部错误。

发生了一些错误,它没有在服务器端捕获。

在您的代码中,您只需要捕获 OptimisticConcurrencyException,您还需要捕获 Exception。

于 2011-02-26T17:53:20.970 回答
0

我设法使它工作。我发现我的 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);
                }
            }
        }
于 2011-02-28T11:09:37.003 回答