问题标签 [astoria]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linq - 针对动态对象运行现有的 LINQ 查询(类似 DataTable)
我正在开发一个通用 OData 提供程序,以对抗我们在这里拥有的自定义数据提供程序。Thsi 是完全动态的,因为我向数据提供者查询它知道的表。到目前为止,我有一个基于 OData 示例代码的基本存储结构。
我的问题是:OData 支持查询并希望我提交 IQueryable 实现。在低端,我没有任何查询支持。不是开玩笑 - 提供者返回表并且不支持 WHERE 子句。性能在这里不是问题 - 表很小。可以在 OData 提供程序中对它们进行排序。
我的主要问题是这个。
- 我提交了一条 SQL 语句来获取表中的数据。结果是某种 ADO.NET 数据阅读器。
- 我需要为这些数据公开一个 IQueryable 实现,以便以后过滤。
知道如何最好地触摸它吗?仅 .NET 3.5(一段时间未计划 4.0)。我正在认真考虑为每个表(发出字节码)创建动态 DTO 类,以便我可以使用标准 LINQ。现在我每个条目都使用一个字典(效率不太高),但我看不到基于它们进行过滤/排序的真正方法。
wcf - OData / WCF 数据服务元数据版本控制
OData 协议及其 WCF 数据服务实现中是否有任何元数据版本支持?
假设我们有一个 OData 服务,它公开了单个 Goods 集合,Goods 实体类型具有三个属性:Key(字符串)、Name(字符串)和 AvailableSince(字符串)。该服务已经在运行,并且有一些消费者依赖于这个元数据模式。接下来,我们要更新 Goods 实体类型——例如将属性 AvailableSince(string) 替换为其他内容,或者将其类型从字符串更改为日期时间——因此我们将有两个版本的元数据,而依赖于第一个版本元数据的消费者将无法根据第二个元数据模式发送正确的请求。
有没有办法在单一服务中提供两个元数据版本?如果是,那么消费者如何在请求中指定元数据版本,以及在 WCF 端应如何处理?
提前感谢所有人。
silverlight - WCF 数据服务中的级联删除
是否可以使用 Silverlight 中的 WCF 数据服务通过单个命令删除持久对象图?我从这个演练开始并添加了删除所选订单的代码(其中包含详细信息):
当我将更改保存回服务器时,会发出删除请求:
但它在数据库端失败,外键约束违反:
我还尝试在 .edmx中将关系的OnDelete属性设置为Cascade
是否可以进行此类删除?谁应该负责删除引用的对象:客户端还是服务器?以及应该向服务器发送多少删除请求:一个或 N+1(其中 N 是给定订单的详细信息数)。也许我错过了一些关键点。是否有任何描述删除对象图的 WCF 数据服务教程?
.net-4.0 - WCF 数据服务和投影。如何从实体投影实例中获取实体 URI?
我正在使用 DataServiceContext 加载一些实体投影(实体有很多属性,为了最大限度地减少流量,我只加载目前需要的那些属性),如下所示:
我需要的是实体的有效 URI 来加载它以获取详细信息视图。
我尝试使用 ctx.TryGetUri(obj, out uri),但它总是返回 null(可能是因为非跟踪投影,但是,我已经加载了 PK 属性(Id),所以它一定不是案子)。
问题是,我如何确定底层数据实体的 URI,有一个带有 PK 的投影对象?
wcf - 如何提高 WCF 数据服务性能
我是 WCF 数据服务的新手,所以我一直在玩。经过一些初步测试后,我对测试数据服务的性能感到失望。
我意识到,因为 WCF DS 是基于 HTTP 的,所以协议中存在固有的开销,但我的测试仍然比我预期的要慢:
环境:
- 一体机:四核 64 位笔记本电脑,配备 4GB RAM,运行 W7。体面的机器。
- 具有 16 个表的小型 SQL 数据库(SQLExpress 2008 R2)……被测表有 243 行。
- 在 IIS 中使用所有默认值托管我的测试服务。
代码:
- 我已经为这个数据库(VS2010 的股票代码生成)创建了一个实体框架模型(DataContext)。
- 我基于这个模型创建了一个数据服务。
- 我创建了一个客户端,该客户端具有此服务的直接服务引用(ObjectContext)(VS2010 的股票代码生成)
- 在客户端中,我还可以直接调用 EF 模型并使用 Native SQL (ADO.NET SqlConnection)
测试计划:
- 每次迭代都连接到数据库(有一个重用连接的选项),查询目标表中的所有行(“EVENTS”),然后对它们进行计数(从而强制执行任何延迟提取)。
- 对 Native SQL (SqlConnection/SqlCommand)、实体框架 (DataContext) 和 WCF 数据服务 (ObjectContext) 分别运行 25 次迭代。
结果:
- Native SQL 25次迭代:436ms
- Entity Framework 25 次迭代:656ms
- WCF数据服务25次迭代:12110ms
哎哟。这比 EF 慢了大约 20 倍。
由于 WCF 数据服务是 HTTP,因此没有机会重用 HTTP 连接,因此每次迭代都强制客户端重新连接到 Web 服务器。但肯定还有比这更多的事情发生。
EF 本身相当快,并且服务和直接到 EF 客户端测试都重用了相同的 EF 代码/模型。数据服务中的 Xml 序列化和反序列化会产生一些开销,但是那么多!?!过去,我在 Xml 序列化方面取得了不错的成绩。
我将使用 JSON 和 Protocol-Buffer 编码运行一些测试,看看我是否可以获得更好的性能,但我很好奇社区是否有任何加快速度的建议。
我不擅长 IIS,所以也许可以设置一些 IIS 调整(缓存、连接池等)来改善这一点?
wcf - 如果用户代理是 IE,在基于 WCF 的 RSS/ATOM 上实现 HTML 响应?
我正在查看 Astoria 博客的RSS 提要,看起来他们做了一些事情来使 RSS 提要看起来像网页,而不是标准的 RSS XML 提要。我猜他们会检查用户代理并相应地更改响应。
我怎样才能提供一个类似的“漂亮”的 RSS 提要,它对 Web 浏览器看起来不错,并且仍然适用于 RSS 阅读器。
odata - 使用 OData WCF 数据服务和 Excel PowerPivot 发布的大型数据集
我想发布一个 SQL Server 数据库,用于测试目的AdventureWorksDW
,Microsoft 提供的数据仓库示例数据库。我在 VS 中创建了一个新的“WCF 数据服务”项目,并创建了一个实体框架模型将其传递给DataService
基类的通用参数。我在模型中包含了一些维度和事实表FactInternetSales
。FactInternetSales 表似乎包含太多数据(60398 条记录),默认情况下无法通过 OData 访问。当我尝试从控制台应用程序迭代 FactInternetSales 实体集时,我收到一条System.Net.WebException
消息:
基础连接已关闭:连接意外关闭。
如果我限制要迭代的行数,比如 1000,我没有问题。
另一方面,当我尝试使用此 OData 服务将数据从 FactInternetSales 加载到 PowerPivot 时,我收到以下错误消息:
无法获取数据馈送“FactInternetSales”的架构。请确保此 Feed 存在。
在InitializeService
我设置的OData Service的方法中config.SetEntitySetPageSize("*", 1000000)
,似乎没有任何效果。我还在服务的 web.config 中添加了以下代码,但没有成功:
我想允许这么多数据流通过 OData 服务是一个配置问题,但我找不到应该更改默认行为的好地方。
wcf-data-services - 如何以编程方式配置 WCF 数据服务?
您将如何在 C# 中流畅地配置以下 WCF 数据服务?
odata - 从 .NET OData 4 客户端调用嵌套 Expand() 的正确方法
问题
在 Web API 上的 OData 4 服务中,从 .NET 客户端调用嵌套 $expand 的正确方法是什么?我们正在使用OData 客户端生成器。回到之前的 WCF 数据服务,我们可以调用 OData 3 服务.Expand("Customers/Orders")
。在带有 OData 4 的 Web API 中,如果您尝试,我们将无法再这样做并收到以下信息.Expand("Customers/Orders")
:
URI 中指定的查询无效。找到了一个遍历多个导航 > 属性的路径。请改写查询,使每个展开路径仅包含类型 >segments 和导航属性。
解决方法
我们可以通过调用 expand 来解决这个问题.Expand("Customers($expand=Orders)")
:在非嵌套的 $expand 场景中,我喜欢这样的 lambda 支持.Expand(d => d.Customers)
。.NET OData 4 客户端中是否有适当的方法来调用嵌套扩展而没有不幸的魔术字符串.Expand("Customers($expand=Orders)")
?如果没有,是否有像“客户/订单”这样更简洁的字符串模式可以使用?谢谢。
odata - .NET OData 4 客户端支持压缩
问题
我在我们的自托管 OWIN/Katana Web API OData 4 服务中添加了对 http 压缩的支持,但我看不到如何在 .NET 客户端中支持压缩。我正在使用 OData 库 v6.5.0,我需要在客户端(OData v4 客户端代码生成器)中支持压缩/解压缩。我正在通过 ActionFilter 使用 Deflate 编码进行压缩。正如通过 Fiddler 确认的那样,一切都在服务器上正确压缩,但我不知道如何配置客户端以支持这一点,因为 OData 客户端使用请求和响应管道,而不是曾经支持这种场景的现已失效的 WritingRequest 和 RecievingResponse 事件。
尝试
通过实验,我发现我可以ReceivingResponse
在我的DataServiceContext
然后调用 ReceivingResponseEventArgs.ResponseMessage.GetStream() 但我不知道如何正确覆盖消息内容。如果我在流上 CopyTo(),我会在 Microsoft.OData.Core.ODataMessageReader.DetectPayloadKind() 处获得空引用异常。我认为这是因为流被读取到末尾并且位置需要设置回零,但我不能这样做,因为流在设置位置时也会引发异常,因为它说它不支持搜索。我认为这仅仅是因为流是只读的。即使我可以复制流以成功解压,如何使用解压后的内容修改响应消息内容?我在 RequestPipeline 或 ResponsePipeline 中根本看不到任何挂钩。澄清,我想将响应消息内容解压,然后设置为稍后发生的具体化,我该怎么做?如何将压缩请求也发送到 OData 服务的额外功劳。谢谢!