如果可能的话,我试图通过反射来使用wcf休息服务。看看下面的代码:

    public static object WCFRestClient<T>(string method, string uri, params object[] args)
    {        
        object o;
        object ret;
        using (ChannelFactory<T> cf = new ChannelFactory<T>(new WebHttpBinding(), uri))
        {                
            T contract = cf.CreateChannel();
            ret = contract.GetType().GetMethod(method).Invoke(o, args);

        }
        return ret;
    }

如你所见,这是一个在运行时占用T的通用方法......我的麻烦是,我不确定我是否能真正反思我正在创建的通道对象....让我说,然后,当我想创建一个对象实例时,麻烦就开始了......因为我无法从界面创建一个对象实例......

我也很高兴听到有没有其他方法可以实现这一目标?但是如果可以的话,我更喜欢使用渠道机制。

有帮助吗?

解决方案

通常,为每个操作创建ChannelFactory都很昂贵。你应该尽可能避免这种情况。 using模式对于WCF中的ICommunicationObject类型也存在问题,因为Dispose()通常对应于Close(),这是一个阻塞/异常抛出调用。您需要明确地调用TimeoutException并处理CommunicationExceptionChannelFactory<T>.CreateChannel

除此之外,您的方法也可行。如果使用T,它将创建一个类型为o的透明代理对象,如果需要,可以通过反射调用它。因此,您不必担心从合约界面创建对象 - WCF已经这样做了。

在您的代码示例中,请确保将contract替换为<=>,您应该得到预期的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top