gpt4 book ai didi

c# - Ria 服务将复杂对象作为参数传递给查询域服务方法

转载 作者:可可西里 更新时间:2023-11-01 08:26:37 25 4
gpt4 key购买 nike

我在使用 WCF RIA 服务时遇到了一些困难,类似于 this thread 中指定的问题.

我正在创建的域服务方法(一个查询方法)应该采用一个复杂的对象参数。域服务方法示例:

public ComplexObjectResult GetComplexObject(ComplexObjectParameter test)
{
//do stuff
}

参数对象:

public class ComplexObjectParameter 
{

[Key]
public decimal ID { get; set; }

... other fields
}

我收到此编译错误:错误 70 域操作条目“GetComplexObject”的参数“test”必须是预定义的可序列化类型之一

在网上搜索后我找到了this msdn thread .它声明这是 RIA 服务的限制,并且线程没有指定适当的解决方法。

现在似乎有一些肮脏的解决方法:

  • 将复杂参数更改为字符串类型并自行序列化/反序列化参数对象,我发现这是一个非常 hacky 的解决方案。

  • 在域服务方法上使用 [Invoke] 标记并放弃所有 RIA 跟踪功能,为此我首先使用 RIA。

上述解决方案是否有缺点较少的替代方案?有人找到了解决此问题的更优雅的解决方法吗?

谢谢

最佳答案

肮脏的解决方法三,是使用 [Invoke] 属性并向域服务添加一个方法以公开“复杂类型”,它通知 WCF RIA 工具在客户端创建实体:

public ComplexObjectParameter ExposeComplexObjectParameter()
{
throw new NotSupportedException();
}

我将 NotSupportedException 放在我的域服务方法中,以防止在远程调用该方法时出现静默故障。

我不确定此解决方案如何影响丢失“所有 RIA 跟踪功能”的问题。它没有回答如何使用复杂类型作为参数来创建可组合查询。

它很脏,但是抽象了最接近问题根源的问题。调用和接收代码更清晰。这在将脏东西压低的同时保持了更高层次的“优雅”。

关于c# - Ria 服务将复杂对象作为参数传递给查询域服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com