Сократите первый SOA с WCF

Это вполне приемлемо, возможно, даже стандарт.

(public/private) static final TYPE NAME = VALUE;

где TYPE - это тип, NAME - это имя во всех заглавных буквах с подчеркиванием для пробелов, а VALUE - это постоянное значение;

Я настоятельно рекомендую НЕ ставить ваши константы в своих собственных классах или интерфейсах.

В качестве примечания: переменные, объявленные как final и изменяемые, все еще могут быть изменены; однако переменная никогда не может указывать на другой объект.

Например:

public static final Point ORIGIN = new Point(0,0);

public static void main(String[] args){

    ORIGIN.x = 3;

}

Это законно, и тогда ORIGIN будет точкой в ​​(3, 0).

12
задан ROMANIA_engineer 23 December 2017 в 15:14
поделиться

5 ответов

WSCF предоставляет инструмент, ориентированный на контракт, с интеграцией VS. Касса. (бесплатно)

По состоянию на 6 июля есть двоичный выпуск с программой установки.

15
ответ дан 2 December 2019 в 06:09
поделиться

Я предпочитаю разработку по контракту. Для этой цели я использовал сервисную фабрику . Это позволило мне сгенерировать как сервисный, так и клиентский код без настройки.

С помощью настройки мы также смогли сгенерировать объекты передачи данных, соответствующие объектам Entity Framework, а также код для перевода из одного в другой; автоматическая регистрация исключений; и HTML-документация служб.

Это дополнение к правилам анализа кода, которые поставляются с Service Factory, которые помогают не дать разработчику выстрелить себе в ногу, выбрав несовместимые параметры WCF.

3
ответ дан 2 December 2019 в 06:09
поделиться

То, как мы это делаем, описано в этом видео:

http://www.dnrtv.com/default.aspx?showNum=103

Идея в том, что мы делаем не использовать генерацию кода, поэтому нам не нужно повторно создавать код при изменении контракта.

Контракт находится в коде и может быть изменен, если есть несоответствие между клиентом и сервером, это будет отображаться в ошибке сборки .

0
ответ дан 2 December 2019 в 06:09
поделиться

Я использую подход «сначала контракт», обычно (но не всегда) с использованием одного и того же представления типа на каждом конце.

На самом деле, чтобы использовать WCF, вам не нужно никаких специальных прокси и т. д .; вы можете использовать обычные типы .NET на обоих концах и вообще не использовать svcutil.exe . Получить работающую службу так же просто, как добавить «ABC» в файл конфигурации и использовать что-то вроде:

public sealed class WcfClient<T> : System.ServiceModel.ClientBase<T>
    where T : class
{
    public T Service { get { return base.Channel; } }
}

Теперь вы можете использовать:

using(var client = new WcfClient<IMyService>()) {
    int i = client.Service.SomeMethod("abc");
}

и все, что у вас есть на клиенте (и сервере), - это ваш Интерфейс IMyService .


Для других инструментов; protobuf-net - это реализация "буферов протокола" Google. API, в котором есть DSL для описания данных и сервисов "сначала контрактом" (и переносимым / совместимым) - например (файл .proto):

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
message SearchResponse {
  repeated string result = 1; 
}
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

Инструмент protobuf-net (который я поддерживаю) включает в себя " protogen "утилита для преобразования этого DSL в C # / VB; и один из вариантов (по крайней мере, для C # - мне нужно будет проверить VB) - создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

который имеет DSL для описания данных и сервисов способом «сначала контракт» (и переносимым / совместимым) - например (файл .proto):

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
message SearchResponse {
  repeated string result = 1; 
}
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

Инструмент protobuf-net (который я поддерживаю) включает «protogen» утилита для преобразования этого DSL в C # / VB; и один из вариантов (по крайней мере, для C # - мне нужно будет проверить VB) - создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

который имеет DSL для описания данных и сервисов способом «сначала контракт» (и переносимым / совместимым) - например (файл .proto):

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
message SearchResponse {
  repeated string result = 1; 
}
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

Инструмент protobuf-net (который я поддерживаю) включает «protogen» утилита для преобразования этого DSL в C # / VB; и один из вариантов (по крайней мере, для C # - мне нужно будет проверить VB) - создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
message SearchResponse {
  repeated string result = 1; 
}
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

Инструмент protobuf-net (который я поддерживаю) включает в себя служебную программу protogen для преобразования этого DSL в C # / VB; и один из вариантов (по крайней мере, для C # - мне нужно будет проверить VB) - создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}
message SearchResponse {
  repeated string result = 1; 
}
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

Инструмент protobuf-net (который я поддерживаю) включает в себя служебную программу protogen для преобразования этого DSL в C # / VB; и один из вариантов (по крайней мере, для C # - мне нужно будет проверить VB) - создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

d необходимо проверить VB) - это создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

d необходимо проверить VB) - это создать полную реализацию прокси-сервера WCF (с вашим выбором методов синхронизации или асинхронности); очень похож на svcutil, но (из-за связи protobuf-net) он включает настраиваемый атрибут [ProtoBehavior] в контрактах операций, так что он использует сериализатор protobuf-net вместо DataContractSerializer (быстрее и эффективнее, но по-другому)

Для интеграции с VS; Я работаю именно над этим ( доказательство ).

но разные).

Для интеграции VS; Я работаю именно над этим ( доказательство ).

но разные).

Для интеграции VS; Я работаю именно над этим ( доказательство ).

5
ответ дан 2 December 2019 в 06:09
поделиться

В WCF есть некоторое разнообразие в том, как выглядит «сначала контракт». Вы можете создать «сначала кодовый контракт», в котором ваши данные и контракты службы выражаются как типы .NET с правильной разметкой атрибутов. Вы можете начать с WSDL и создать контракты службы и данных или начать со схемы XML для своего контракта данных и выразить контракт службы в виде кода. Какой путь вы выберете, действительно зависит от характера контракта и того, как он будет использоваться.

Если вы реализуете что-то в спецификации WSDL, генерация кода из WSDL - очевидный выбор, а генерация вручную - не такая уж и сложная задача. большое дело. Вы можете инициировать генерацию из события сборки проекта (или войти в msbuild), если хотите, чтобы изменения в файле WSDL распространялись немедленно.

Если у вас есть существующая схема (XSD), которую вы хотите использовать в качестве контракта данных, или вы предпочитаете разработать свой контракт данных таким образом, чтобы упростить повторное использование на других платформах, вы можете сгенерировать типы из схемы с помощью xsd.exe ( или сторонняя альтернатива). В этом случае вы должны использовать свои XML-сериализуемые типы в контракте службы, ориентированной на код, например this :.

Если вы сами разрабатываете клиенты и серверы в .NET, и ваши клиенты могут либо получите свои сборки контрактов, либо с радостью создадите клиентов из метаданных службы (например, WSDL), моделирование ваших контрактов в коде - отличный опыт. Используя схему «известных типов», вы можете поддерживать модели наследования в своем контракте данных, что может быть очень мощным. Вы можете полностью пропустить создание клиентского кода (как упоминалось в других ответах), напрямую сославшись на сборку контракта в вашем клиенте. Это очень продуктивно и элегантно, но вы должны знать, что вы можете создать проблемы взаимодействия, если будете слишком изобретательны.

2
ответ дан 2 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: