在为通过HTTP公开的简单WCF服务实现MonoTouch客户端时,我得到以下InvalidOperationException
。
MonoTouch不支持动态代理代码生成。重写此方法或其调用方以返回特定的客户端代理实例。
来自this file中的第141行。
所以我需要在我自己的ClientBase子类中使用不使用动态代码生成的实现覆盖CreateChannel()
上的方法System.ServiceModel.ClientBase<T>
。该方法返回T
。
如果我返回服务客户端的新实例,System.ServiceModel.ClientBase<T>
会在Unable to cast object of type 'MyServiceClient' to type 'System.ServiceModel.IClientChannel'
的getter上抛出异常InnerChannel
。
我不清楚如何从这一点开始 - 任何指针都赞赏。
答案 0 :(得分:1)
从源代码看,框架似乎无法通过反射创建频道的新实例,因此需要您自己覆盖该方法。
大部分WCF基础设施都不明显,主要是因为它对泛型的不寻常使用(只有在你经历了管道和后面之后才有意义)。在这种情况下,CreateChannel()
返回的频道必须为IClientChannel
(因为您在对话的客户端)。确保您的频道上存在此界面,您的错误应该消失(可能会被其他问题所取代)。
答案 1 :(得分:0)
这是一个非常简单的界面 - 所以我刚刚编写了一个基于System.Net.WebClient的简单客户端,它运行良好,大约有10行代码。