6

我已经在 Visual Studio 中生成了对 SDL Tridion 2011 SP1 上的 CD OData webservice 的服务引用,一切似乎都运行良好,但是当我使用如下代码请求特定组件时:

ContentDeliveryService cdService1 = new ContentDeliveryService(new Uri("http://xxx:81/odata.svc"));
var item =  cdService1.Components.Where(p => p.ItemId == 29 && p.PublicationId == 1).First();
Console.WriteLine(item.ItemId);

它抛出异常:

 The closed type ConsoleApplication1.CdService.Component does not have a corresponding IsMultimedia settable property.

有人知道这个热修复吗?

4

2 回答 2

7

我认为问题在于服务器向您发送了客户端不知道的属性(IsMultimedia 属性)。您可以通过使用例如 Fiddler 查看来自服务器的响应来确认这一点。如果服务器上的 Component 类型被标记为打开(可以具有比声明的属性更多的属性),则可能会发生这种情况。客户端库目前不直接支持开放类型。

如果您不需要客户端上的 IsMultimedia 属性,您可以通过设置 cdService1.IgnoreMissingProperties = true 来抑制此错误。

如果您确实需要客户端的 IsMultimedia 属性,则为您生成的 Component 类应该是分部类,因此您可以手动为其添加属性 IsMultimedia。然后它也应该工作。

于 2012-05-08T08:36:55.980 回答
3

这似乎是一个缺陷,将在下一个版本中修复。设置IgnoreMissingProperties有效,另一种解决方案是打开Reference.cs此引用的文件并将public global::System.Nullable<bool> Multimedia属性更改为IsMultimedia

于 2012-05-08T08:42:46.860 回答