#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, чтобы иметь возможность использовать такие пользовательские расширения при генерации клиентского кода.