在爲通過HTTP公開的簡單WCF服務實現MonoTouch客戶端時,我得到以下InvalidOperationException
。正在努力重寫System.ServiceModel.ClientBase <T> .CreateChannel()
MonoTouch不支持動態代理代碼生成。重寫此方法或其調用方以返回特定的客戶端代理實例。
來自this file中的第141行。
所以我需要覆蓋我自己的ClientBase的子類System.ServiceModel.ClientBase<T>
CreateChannel()
方法與不使用動態代碼生成的實現。該方法返回一個T
的實例。
如果我返回服務客戶端的新實例,System.ServiceModel.ClientBase<T>
會在InnerChannel
的獲取方上拋出異常Unable to cast object of type 'MyServiceClient' to type 'System.ServiceModel.IClientChannel'
。
我不清楚如何從這一點着手 - 任何指針讚賞。
我有同樣的問題,你能提供示例代碼來解決這個問題嗎?謝謝。 – Neal 2012-03-17 17:00:08
只需爲該服務構建一個非常簡單的桌面客戶端,就可以啓動Wireshark以查看線路上發生的情況,然後使用使用WebClient的簡單代碼複製它(http://msdn.microsoft.com/zh-cn/library/system .net.webclient(v = vs.100).aspx)。然後將這些代碼隱藏在MonoTouch解決方案的某個位置,當您最終在MonoTouch上正常工作時,請使用正確的代碼替換基於WebClient的實現。 – tomfanning 2012-03-18 21:56:21