System.ServiceModel.Channels.MessageProperties对象已被释放

时间:2012-08-20 11:15:26

标签: wcf

当我在WCF服务中引发异常时。内置的WebErrorHandler异常处理程序本身无法尝试访问OperationContext.Current.IncomingMessageProperties,因为它似乎已被处置。结果是实际错误被屏蔽了,我总是得到一个HTML错误输出。

为什么要处理我的IncomingMessageProperties?该服务返回一个流 - 不确定它是否相关。

2 个答案:

答案 0 :(得分:0)

我发现了问题。我正在创建一个WebFaultException。现在我创建一个普通的Exception并使用IErrorHandler将它正确地序列化到客户端。

答案 1 :(得分:0)

当我尝试从另一个方法而不是OperationContract方法访问OperationContext.Current.IncomingMessageProperties时,会发生这种情况。

访问OperationContext.Current.IncomingMessageProperties 为OperationContext创建一个extencion方法来访问属性

类似的东西:

public static string GetClientIP(this OperationContext context)
        {
            string ip = "";
            MessageProperties messageProperties = context.IncomingMessageProperties;
            RemoteEndpointMessageProperty endpointProperty =
              messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;

            if (endpointProperty != null)
            {
                 ip = endpointProperty.Address;
            }

            return ip;
        }