Breeze.Sharp не может импортировать метаданные с сервера Breeze для ASP.NET Core 3

Я пытаюсь использовать ветерок с Blazor Webassembly. Мне удалось перекомпилировать breeze Sharp для .Net Standard 2.0 и 2.1, что показало положительные результаты при чтении данных с сервера. Однако при попытке загрузить метаданные из скрипта я заметил, что метод MetadaStore.ImportMetadata не загружает метаданные. Когда я продолжил, я обнаружил, что Breeze.Sharp ожидает свойство metadataVersion и узел namingConvention из метаданных json, возвращаемых сервером breeze.

Я вижу, что сначала изменился формат метаданных, и эти свойства больше не присутствуют в сгенерированных метаданных. Но если я FetchMetadata использую DataService, то метаданные загружаются в хранилище метаданных.

Мой вопрос: ... Есть ли план обновления breeze Sharp в соответствии с последними разработками на платформе dotnet? Пожалуйста, примите это во внимание, так как он очень хорошо сочетается с Blazor. На самом деле мой эксперимент прошел очень хорошо, ожидая загрузки метаданных, хранящихся локально, вместо того, чтобы каждый раз загружать их с сервера.

  private void DeserializeFrom(JNode jNode, bool isFromServer) {
  MetadataVersion = jNode.Get<String>("metadataVersion");
  // may be more than just a name

  var ncNode = jNode.GetJNode("namingConvention");
  if (ncNode != null) {
    var nc = Configuration.Instance.FindOrCreateNamingConvention(ncNode);
    if (nc == null) {
      OnMetadataMismatch(null, null, MetadataMismatchTypes.MissingCLRNamingConvention, ncNode.ToString());
    } else {
      // keep any preexisting ClientServerNamespaceMap info
      NamingConvention = nc.WithClientServerNamespaceMapping(this.NamingConvention.ClientServerNamespaceMap);
    }
  }

  // localQueryComparisonOptions
  jNode.GetJNodeArray("dataServices").Select(jn => new DataService(jn)).ForEach(ds => {
    if (GetDataService(ds.ServiceName) == null) {
      AddDataService(ds);
    }
  });
  jNode.GetJNodeArray("structuralTypes")
    .ForEach(jn => UpdateStructuralTypeFromJNode(jn, isFromServer));

  jNode.GetMap<String>("resourceEntityTypeMap").ForEach(kvp => {
    var stName = kvp.Value;
    if (isFromServer) {
        stName = TypeNameInfo.FromStructuralTypeName(stName).ToClient(this).StructuralTypeName;
    }
    // okIfNotFound because metadata may contain refs to types that were already excluded earlier in
    // UpdateStructuralTypeFromJNode
    var et = GetEntityType(stName, true);
    if (et != null) {
      SetResourceName(kvp.Key, et);
    }
  });
}

person Amour Rashid    schedule 23.03.2020    source источник
comment
Доступен Breeze Sharp Standard, который работает с Blazor ... как на стороне клиента, так и на стороне сервера. Но проблема с импортом и экспортом метаданных остается. Надеюсь, они разберутся с этим.   -  person Amour Rashid    schedule 11.06.2020


Ответы (1)


Я очень внимательно следил за новыми разработками, и это то, что я заметил до сих пор.

  1. Microsoft возрождает продукт под названием Microsoft Restier. Сначала он был разработан на платформе .Net Framework, но теперь они переписывают его для работы на .Net Core, и ожидается, что он станет RTM в первой половине 2020 года. Хорошая вещь в этом Microsoft Retier заключается в том, что ваша полная сущность Контекст предоставляется как конечная точка OData со списками сущностей, предоставляемыми без необходимости создания контроллеров для действий. Таким образом, уменьшается утомительная работа по написанию действия для каждой сущности, которую вы хотите предоставить как ресурс OData, отличный от текущего случая с простым OData и Breeze Server. Существует так много областей для конфигураций и расширяемости.

  2. Microsoft переделывает RIA Data Services в форме OData Connected Service. Это создает прокси-сервер так же, как службы данных RIA. При сгенерированном прокси нет необходимости создавать модель данных клиента. Модели, созданной на сервере, будет достаточно... не так, как в случае с бризом, где вам нужно создать модель на клиенте, хотя есть признаки того, что в DevForce они изучают использование PostSharp, чтобы сделать возможным использование объектов POCO, совместно используемых между Бриз сервер и клиенты. Однако мы не знаем, когда это будет доступно.

  3. Подключенная служба OData без проблем работает с Blazor Server (на стороне клиента есть некоторые ошибки, над которыми ведется работа) и устраняет головную боль при работе с голым HttpClient.

  4. Что касается бриза, то в настоящее время он хорошо работает как с версиями Blazor Server, так и с версиями Web Assembly (Breeze Sharp Standard). Я думаю, что они переработают свой продукт и позволят ему работать с OData так же, как это делает Breezejs. В сочетании с Microsoft.Restier это очень упростит жизнь. На самом деле у бриза есть очень хорошие функции, особенно когда дело доходит до кэширования.

Давайте подождем и посмотрим.

person Amour Rashid    schedule 18.04.2020