【问题标题】:Problem passing IEnumerable<IDictionary> over WCF to Silverlight通过 WCF 将 IEnumerable<IDictionary> 传递到 Silverlight 时出现问题
【发布时间】:2011-07-25 03:39:52
【问题描述】:

我有一个 WCF 服务,我正在尝试使用它来生成一个 IEnumerable&lt;IDictionary&gt;,然后从中动态构建一个网格。

返回数据的服务器上的方法签名是:

[OperationContract]
[FaultContract(typeof(GeneralServiceFault))]
IEnumerable<IDictionary> GetReport(string name, ReportingParameter[] parameters);

我正在使用以下方法构建我的服务参考:

call "C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Tools\slsvcutil.exe" http://localhost:8082/Service?wsdl /mergeConfig /config:..\ServiceReferences.ClientConfig /edb /namespace:"*,namespace.Service" /r:"c:\Program Files\Microsoft Silverlight\4.0.60129.0\System.Windows.dll"

这会生成一个服务引用,归结为:

 public Dictionary<object, object>[] EndGetReport(IAsyncResult result)

无论如何我可以使用通用 IDictionary 生成它,以便我可以调用找到的扩展方法 here?或者如果不是,我应该怎么做?

【问题讨论】:

  • 您在字典中传输哪些类型? WCF 服务不知道它们,因此它不会在元数据中公开它们。因此,客户只期望Dictionary&lt;object, object&gt;
  • 字典对象由 GetValue() 使用 DataReader 类填充。这可以返回 DataReader 类可以返回的任何指定的 clr 类型。它不返回任何我自己的类型。这些是否需要专门设置为已知类型?

标签: c# silverlight wcf generics datagrid


【解决方案1】:

如果您正在使用/可以访问 Visual Studio,请尝试以下操作:

  • 在 Visual Studio 解决方案资源管理器中右键单击服务的服务参考

  • 选择“配置服务参考”选项

  • 确保指定的集合类型是System.Collections.Generic.List

  • 确保指定的字典集合类型是System.Collections.Generic.Dictionary

抱歉,我不熟悉svcutil 用于生成默认配置以外的任何内容的命令行参考。

【讨论】:

    【解决方案2】:

    我不认为这是可能的......
    只需将该扩展方法更改为:

    public static IEnumerable ToDataSource<TDictionary>(
              this IEnumerable<TDictionary> list) where TDictionary : IDictionary
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      相关资源
      最近更新 更多