正在努力覆盖System.ServiceModel.ClientBase. createchannel()

本文关键字:createchannel ClientBase 努力 覆盖 System ServiceModel | 更新日期: 2023-09-27 18:19:05

在实现通过HTTP公开的简单WCF服务的MonoTouch客户端时,我得到以下InvalidOperationException

MonoTouch不支持动态代理代码生成。重写此方法或其调用方以返回特定的客户端代理实例。

来自该文件的第141行。

因此,我需要在我自己的ClientBase子类中覆盖CreateChannel()上的CC_2方法,该实现不使用动态代码生成。该方法返回T的一个实例。

如果我返回一个服务客户端的新实例,System.ServiceModel.ClientBase<T>会在InnerChannel的getter上抛出异常Unable to cast object of type 'MyServiceClient' to type 'System.ServiceModel.IClientChannel'

正在努力覆盖System.ServiceModel.ClientBase<T>. createchannel()

我不知道如何从这一点着手,请指教。

从源代码来看,框架似乎无法通过反射创建通道的新实例,因此需要您自己重写该方法。

大部分WCF基础设施都不明显,主要是由于它不寻常地使用了泛型(只有在您经历了管道和返回之后才有意义)。在这种情况下,CreateChannel() 返回的通道必须IClientChannel(因为您在会话的客户端)。确保这个接口出现在你的频道上,你的错误就会消失(可能会被另一个问题所取代)。

这是一个非常简单的界面-所以我只是写了一个基于System.Net的简单客户端。WebClient,它工作得很好,只有大约10行代码。