首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >odata4j请求元数据的次数太多

odata4j请求元数据的次数太多
EN

Stack Overflow用户
提问于 2016-05-02 10:29:24
回答 1查看 109关注 0票数 0

我使用odata4j库访问WCF数据服务。

这就是我如何从我的Android代码中调用一个服务方法:

代码语言:javascript
复制
 OQueryRequest<OEntity> l = consumer.getEntities("GetDataList")
    .custom("dataId", String.format("'%s'", actualData.ID))
    .orderBy("Name").skip(0).top(200);

我用WireShark检查了它,我发现每个方法调用之前都有元数据信息请求的2调用():

为什么?它们是必要的吗?元数据信息很重,不应该每次都请求(更别提2次了)。

我应该如何防止odata4j多次请求元数据信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 12:27:38

我在源代码中发现了“额外”请求(在odata4j/odata4j-core/src/main/java/org/odata4j/consumer/AbstractODataConsumer.java中):

代码语言:javascript
复制
@Override
public EdmEntitySet findEdmEntitySet(String entitySetName) {
  EdmEntitySet rt = super.findEdmEntitySet(entitySetName);
  if (rt == null && delegate != EdmDataServices.EMPTY) {
    refreshDelegate();
    rt = super.findEdmEntitySet(entitySetName);
  }
  return rt;
}

如果找不到实体集,使用者将创建一个额外的往返到服务器,以再次获取元数据(通过调用refreshDelegate()):

代码语言:javascript
复制
private void refreshDelegate() {
  ODataClientRequest request = ODataClientRequest.get(AbstractODataConsumer.this.getServiceRootUri() + "$metadata");
  try {
    delegate = AbstractODataConsumer.this.getClient().getMetadata(request);
  } catch (ODataProducerException e) {
    // to support services that do not expose metadata information
    delegate = EdmDataServices.EMPTY;
  }
}

我不太明白为什么:可能它假设服务器已经更改,并且元数据的新版本可用,所以它会再次尝试。

如果失败,则尝试查找具有给定名称的函数。

就我个人而言,我不认为这是非常有效的,除非服务器端非常不稳定,以至于在调用之间发生变化。

因此,如果服务器上没有更改的元数据,则删除entitySet的检查并让它作为null返回是安全的:

代码语言:javascript
复制
@Override
public EdmEntitySet findEdmEntitySet(String entitySetName) {
  EdmEntitySet rt = super.findEdmEntitySet(entitySetName);
  //if (rt == null && delegate != EdmDataServices.EMPTY) {
  //  refreshDelegate();
  //  rt = super.findEdmEntitySet(entitySetName);
  //}
  return rt; //if it is null, then the search for a function will commence
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36980255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档