【问题标题】:Unable to set CookieContainer on service client in MonoTouch无法在 MonoTouch 中的服务客户端上设置 CookieContainer
【发布时间】:2011-08-01 16:40:58
【问题描述】:

我有一个 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 版本的限制?

【问题讨论】:

  • 这个问题似乎在 MonoTouch 4.0.4.1 中再次出现。在 4.0.3 中一切正常。你有没有找到解决它的方法?
  • 我可以确认问题在 MT 4.0.7 中仍然存在

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


【解决方案1】:

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

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

至少,这对我有用,并且适用于使用基本 HTTP 绑定的 WCF 服务。

【讨论】:

  • 这里的想法是代码在 MT 应用程序和 WP7 应用程序之间共享。我认为为这种情况构建正确绑定的一段代码会是一个更好的主意。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    相关资源
    最近更新 更多