使用我的自定义界面的WCF ChannelFactory CreateChannel方法-

ChannelFactory<MyServiceInterface> myFactory=
new ChannelFactory<MyServiceInterface>(binding,endpoint);

MyServiceInterface clientInterface = myFactory.CreateChannel();


在网路上阅读很多东西,看起来我想正确关闭频道,例如-

private void ProperlyDisposeChannel(ICommunicationObject comObj)
        {
            bool success = false;

            if (comObj == null || comObj.State == CommunicationState.Closed)
            {
                return;
            }

            try
            {
                if (comObj.State != CommunicationState.Faulted)
                {
                    comObj.Close();
                    success = true;
                }
            }
            catch (Exception e)
            {
                //optionally log exception
            }
            finally
            {
                if (!success)
                {
                    try
                    {
                        comObj.Abort();
                    }
                    catch (Exception e)
                    {
                        //do not retry to abort, optionally log
                    }
                }
            }
        }


因此,我试图将频道投射到IClientChannel(或也许是IChannel),但是VS警告我-
可疑的转换-解决方案中没有任何类型可以继承MyServiceInterface和System.ServiceModel.IClientChannel

我的印象是,工厂返回的代理会自动实现IClientChannel。我错了吗?这是什么警告?我应该将频道投放到什么位置?也许我的ProperlyDisposeChannel方法应该接受IClientChannel而不是ICommunicationObject(我更喜欢ICOmmuminationObject,因为它也适用于其他对象)

所以我正在尝试以下行给我警告-

ProperlyDisposeChannel((IChannel)clientInterface);


ProperlyDisposeChannel((IClientChannel)clientInterface);

最佳答案

尽管收到了可疑的警告,您仍可以进行显式转换。实际上,CreateChannel()签名返回了服务的接口类型,但也继承了IChannel接口。

这很有意义,因为该方法显然不能返回两种类型,从而可以直接使用您的服务。

这是一个实现选择,它可能一直在返回,例如public interface IChannel<T> : IChannel { T Instance {get;} }

08-25 02:24