Может ли ключевое слово params быть выражено через определение WSDL

#c# #wcf #wsdl #params

#c# #wcf #wsdl #параметры

Вопрос:

Приложение, которое я разрабатываю, предоставляет метаданные службы для службы WCF, реализующей следующий контракт на обслуживание:

 [ServiceContract]
public interface IService
{
    [OperationContract]
    object Execute( string action, params object[] args );
}
  

После добавления ссылки на сервис я заметил, что в сервисном контракте нет params ключевого слова и его реализации в сгенерированном Reference.cs файле.

Есть ли params аналог в определении WSDL?

Или это params что-то специфичное для C # и не может быть выражено через определение WSDL, поэтому service client generator не знает, что params должно быть добавлено во время генерации?

Ответ №1:

params это просто синтаксический сахар, который позволяет вам вызывать метод, ожидающий массив объектов, без передачи подготовленного массива. WCF ничего об этом не знает — он должен просто ожидать массив объектов. Кстати. передача массива object в service operation может привести к множеству проблем, потому что, если вы передаете пользовательский объект в качестве параметра, WCF может не знать, как сериализовать объект.

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

1. Спасибо, мне просто нужно было подтверждение. Я очень хорошо осведомлен о проблемах. Я не знаю, какие типы может ожидать служба. Следовательно, служба настроена с пользовательским поведением конечной точки, которое позволяет добавлять известные типы служб с помощью конфигурации. Хм, я не совсем уверен, возникнет ли проблема во время сериализации переданного объекта (это на стороне клиента, верно?). Я думал, что это произойдет только во время десериализации, поскольку служба не знает о типе части полученного сообщения SOAP (при использовании SOAP). Поправьте меня, если я ошибаюсь.

2. Если вы используете известные типы, а типы описаны в WSDL, все должно быть в порядке.

3. Мне было интересно, есть ли способ включить пользовательские данные в определение WSDL, которые могли бы использоваться инструментом генерации ссылок на пользовательские службы для включения params ключевого слова. Вы случайно не знаете, есть ли в WSDL элемент, который может содержать произвольный XML?

4. Да, это так — WSDL предлагает точки расширения, но для этого потребуется, чтобы вы написали пользовательский инструмент, подобный svcutil, чтобы иметь возможность использовать такие пользовательские расширения при генерации клиентского кода.