如何从另一个服务的元数据构造的运行时代理获取InstanceContext

时间:2010-03-26 15:33:33

标签: c# wcf

我有以下函数尝试从其他服务的元数据创建回调InstanceContext。

    private InstanceContext GetCallbackIC(Type proxy, ServiceEndpoint endpoint){
        try {
            IDuplexContextChannel dcc;
            PropertyInfo pi = proxy.GetProperty("InnerDuplexChannel");

            if (pi.GetIndexParameters().Length > 0) {
                dcc = (IDuplexContextChannel)pi.GetValue(Activator.CreateInstance(proxy, OperationContext.Current.InstanceContext, endpoint.Binding, endpoint.Address), new object[] { 0 });
            } else {
                dcc = (IDuplexContextChannel)pi.GetValue(Activator.CreateInstance(proxy, OperationContext.Current.InstanceContext, endpoint.Binding, endpoint.Address), null);
            }
            return new InstanceContext(dcc.CallbackInstance);
        } catch (Exception ex) {
            return null;
        }
    }

“OperationContext.Current.InstanceContext”在这里不正确,因为它会抛出异常 - “提供给ChannelFactory的InstanceContext包含一个不实现CallbackContractType的UserObject ......”

如何获取代理的InstanceContext?

由于

1 个答案:

答案 0 :(得分:0)

我通过在检索元数据后的运行时为回调接口创建实现对象来解决问题。 InstanceContext只是一个包装器。我原来的想法不对。