Соглашения об именах WCF для расширенных методов - PullRequest
2 голосов
/ 22 мая 2009

У меня есть метод, представленный как OperationContract для моей службы WCF, который я хотел бы переработать. Предыдущий программист написал что-то вроде:

public ReportResultObject GetReport(string stringContainingParameters)

Я хотел бы иметь метод, похожий на этот:

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation)

Поскольку WCF не допускает перегруженных методов без указания атрибута Name в OperationContract, и я не хочу нарушать работу текущих клиентов, существует ли соглашение об именах для подобных ситуаций? Что-то вроде GetReportV2 или GetReportHeyUseMeInstead?

Ответы [ 4 ]

6 голосов
/ 22 мая 2009

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

public ReportResultObject GetReportTheSuperDooperWay(
    GetReportParameters parameters)

Что это тебе дает? Ну

[DataContract]
public class GetReportParameters
{
 [DataMember(IsRequired=false)]
 public string parameters;

 [DataMember(IsRequired=false)]
 public int[] someIds;

 [DataMember(IsRequired=false)]
 bool includeAdditionalInformation
}

Таким образом, поскольку каждое поле является необязательным, вы можете добавлять новые поля, не нарушая существующих клиентов. Это довольно упрощенный пример, так как вы также захотите реализовать IExtensibleDataObject , и вы должны управлять версиями через пространства имен как на уровнях контракта service , так и data .

1 голос
/ 22 мая 2009

Создайте новый операционный договор и добавьте к нему пространство имен. Затем пусть ваши клиенты, использующие новый контракт, называют его через пространство имен. Это будет имитировать управление версиями.

1 голос
/ 22 мая 2009

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

public ReportResultObject GetReportWithAdditionalInformation(...)

может быть слишком много, хотя!

Я бы определенно избегал GetReportV2 или подобного.

0 голосов
/ 22 мая 2009

Если ваша служба WCF является RESTful, имеет ли значение, если bool includeAdditionalInformation пройдено или нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...