Подтвердить что ты не робот

Перегруженные методы не поддерживаются службой WCF?

У меня есть два метода, названных

[OperationContract]
UserAccount GetUser(Int32 id);

[OperationContract]
UserAccount GetUser(string username, string password);

когда я пытаюсь их построить, они сказали, что вы не можете использовать одни и те же методы имени в сервисе? Это.

4b9b3361

Ответ 1

Это ограничение WSDL. Он не поддерживает те же концепции перегрузки, что и С#/. NET, поэтому имена методов для служб должны быть уникальными. У вас есть два варианта решения проблемы.

Сначала нужно использовать разные имена для ваших методов. Другой - установить свойство Name на одном из ваших OperationContracts, например

[OperationContract(Name="GetUserById")]
UserAccount GetUser(Int32 id);

[OperationContract]
UserAccount GetUser(string username, string password);

Ответ 2

WSDL не поддерживает те же концепции перегрузки С#. Вы можете использовать Name в своей OperationContract, чтобы указать свои методы.

 [OperationContract(Name="GetUserInt")]
 UserAccount GetUser(Int32 id);

 [OperationContract(Name="GetUserString")]
 UserAccount GetUser(string username, string password);

Ответ 3

Попробуйте следующее:

- [OperationContract(Name= "GetUserWithID")]
   UserAccount GetUser(Int32 id);

- [OperationContract(Name= "GetUserWithUserName")]
  UserAccount GetUser(string username, string password);

Дополнительная информация

Ответ 4

Это недостаток WCF. Причина в том, что, когда мы полагаемся на услугу для клиента, тогда не должно быть дублирования, иначе клиент будет путать, какой метод делает что? Итак, вот варианты решения проблемы. Используя другой атрибут имени Операционного договора.

[OperationContract (Name= "GetUserByID" )]

UserAccount GetUser (Int32 id);

[OperationContract (Name= "GetUserByUName_Password" )]

UserAccount GetUser (имя пользователя строки, строковый пароль);