1

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

4

2 回答 2

0

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

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

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

于 2011-03-24T20:54:15.050 回答
0

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

于 2011-05-14T10:45:47.767 回答