【问题标题】:WCF and error stored procedureWCF 和错误存储过程
【发布时间】:2012-08-09 16:46:20
【问题描述】:

我有一个存储过程,它返回 SQL Server 中数据库邮件的状态,它返回字符串“已停止”或“已启动”。我必须在 C#、Silverlight 和 WCF 数据服务中使用它。

这是我的代码:

contex.BeginExecute<String>(new Uri(uri2), OnQueryComplete3, null);
...
private void OnQueryComplete3(IAsyncResult result)
{
   grLog.ItemsSource = contex.EndExecute<String>(result).ToList<String>();
}

我有错误:

错误处理响应流。 XML 元素包含混合 内容。

服务操作:

[WebGet]
public IQueryable<String> Status_Serwer()
{
return CurrentDataSource
.status_serwer()
.AsQueryable();
}

我发现“.NET 4.0 仍然不支持返回原始或复杂类型(或这些类型的集合)的服务操作的响应的具体化。”在这次讨论中http://go4answers.webhost4life.com/Example/incoking-webget-throws-exception-56000.aspx。是真的吗?

【问题讨论】:

  • 你能查出contex.EndExecute&lt;String&gt;(result)的结果是什么,发在这里吗?
  • 更好 - 请您使用 Fiddler(或任何其他 HTTP 跟踪器)等工具获取响应并将其发布在这里?还有,service中的service操作是怎么定义的(返回类型是什么)?

标签: c# stored-procedures wcf-data-services


【解决方案1】:

IQueryable 通常用于尚未执行的列表,并且需要交互式迭代。因为您在服务器上将数据拉到一起,所以最好拉出整个状态记录列表,然后将它们发送给您的客户端。尝试在您的回复中使用 List 而不是 IQueryable。请注意,List 是可序列化的。

假设“CurrentDataSource.status_serwer()”返回一个可枚举的字符串列表,这段代码可能会解决问题:

[WebGet]
public List<String> Status_Serwer()
{
    return CurrentDataSource
          .status_serwer()
          .ToList();
}

【讨论】:

  • 您是在尝试返回响应列表,还是仅返回一个响应(“已停止”或“已启动”)?如果只有一个响应,那么您可以简单地返回一个字符串,而不是尝试返回一个对象列表。
  • 刚刚看到这篇文章,这可能会有所帮助:social.msdn.microsoft.com/Forums/en-US/wcf/thread/…。如果您通过 REST 使用原始的“WebGet”操作,那么您似乎仅限于字符串并且不能使用集合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2016-02-08
相关资源
最近更新 更多