WCF AddServiceEndpoint не удается найти атрибут ServiceContract

#wcf

#wcf

Вопрос:

У меня есть серверный код, который был отложен на некоторое время, и я вернулся, чтобы протестировать его.

Мы создаем ServiceHost в классе и добавляем конечные точки к ServiceHost . Когда мы добавляем конечную точку, мы получаем исключение со словами:

[не удается найти атрибут ServiceContract.]

Но атрибут есть, и я добавил код для получения атрибутов и проверки его наличия.

  public static void AddEndPoint ( ServiceHost host, string url, Type implementsType )
 {
    var binding = CreateBinding( url );



    var attrs = implementsType.GetCustomAttributes ( false );

    host.AddServiceEndpoint ( implementsType, binding, url );
}

[ServiceContract]
public interface IHelloWorldService
{
    [OperationContract]
    string SayHello ( string name );
}
  

Я создал пример sln, который отлично работает, где все библиотеки являются библиотеками .net framework.

В обычной sln наши интерфейсы служб находятся в библиотеке .net standard 2.0, наши службы находятся в библиотеке .net framework, а проект, который создает узел службы, является библиотекой .net Framework. Я не могу понять, почему, если атрибут присутствует при просмотре в массиве attrs, и все же AddServiceEndPoint его не находит.

Комментарии:

1. Убедитесь, что ваши обычные проекты .NET Framework имеют версию 4.6.1

2. Мы используем 4.7.2, почему 4.6.1 поможет?

3. Ну, вы говорите, что контракты / интерфейсы соответствуют .NET Standard 2.0. Это подразумевает 4.6.1 . Так что, если бы ваш проект внедрения сервиса или любой другой зависимый проект был earlier than that , у вас возникли бы проблемы. learn.microsoft.com/en-us/dotnet/standard/net-standard

4. Я понимаю. Не все проекты .net Framework используют 4.7.2, а стандартная библиотека .net использует .net core 2.

5. Отлично. К вашему сведению — .NET Core 2 является частью .NET Standard 2.