无法在MonoTouch中的服务客户端上设置CookieContainer

时间:2011-03-24 20:19:36

标签: wcf windows-phone-7 xamarin.ios cookiecontainer

我有一个MonoTouch项目,使用我与Windows Phone 7应用程序共享的一些代码。此共享代码为使用SLSvcUtil.exe生成的RIA域服务(使用/ Soap端点)创建WCF代理。这就是代码的样子:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://someurl/someservice.svc");

var client = new MyDomainServiceSoapClient(binding, address);
client.CookieContainer = _cookieContainer; // <-- EXCEPTION here

这段代码在WP7中有效,但在MonoTouch中失败了,我找不到原因。我在MonoTouch中遇到的例外是:

System.InvalidOperationException: Unable to set the CookieContainer.
Please make sure the binding contains an HttpCookieContainerBindingElement.
    at MyDomainServiceSoapClient.set_CookieContainer

在设置CookieContainer之前,我尝试了以下选项,但仍然是同样的错误:

binding.EnableHttpCookieContainer = true;
binding.AllowCookies = true;
binding.CreateBindingElements()
    .Add(new HttpCookieContainerBindingElement()); // ??

更新:我也尝试手工构建一个CustomBinding并添加一个HttpCookieContainerBindingElement但这也行不通。

有什么想法吗? MonoTouch网站告诉我WCF实现是“实验性的”,所以这可能是MonoTouch当前版本的限制吗?

2 个答案:

答案 0 :(得分:0)

我不知道SLSvcUtil.exe作为Monotouch的代理生成器是怎么回事,但我总是将它与Silverlight结合使用,因为Silverlight是WP7原生的,这就是它在那里工作的原因。

在MT中,您可能需要以MT方式执行,打开MonoDevelop并从那里添加对服务的引用,以便使用Mono框架及其WCF代理实现创建它,而不是为Silverlight服务代理生成代码。

至少,这对我有用,并且可以使用基本的HTTP绑定很好地处理WCF服务。

答案 1 :(得分:0)

事实证明,这是Mono框架中的一个错误。从MonoTouch 4.0.1开始,这个问题已经解决,所以我可以毫无问题地使用上面的代码。