Почему я получаю сообщение об ошибке «не удается неявно преобразовать тип ‘void’ в ‘string’ при вызове этого метода в моем веб-сервисе?

#c# #azure #wcf #methods

#c# #azure #wcf #методы

Вопрос:

Итак, проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю метод внутри моей ссылки на службу WCF, я получаю код с красным подчеркиванием «Не удается неявно преобразовать тип ‘void’ в ‘string'». Изначально я предположил, что случайно установил для метода webservice значение public void GetData() Однако при дальнейшем рассмотрении я знаю, что это не так. Метод WCF, который я пытаюсь вызвать, является:

     public string GetData()
    {
       return "StringRecieved";
    }
  

Контракт на операцию определяется следующим образом:

     [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            string GetData(); 
        }
  

И место, где я вызываю метод, находится в другом приложении.

     Service1Client.EndpointConfiguration endpointConfiguration = new Service1Client.EndpointConfiguration();
        Service1Client service1Client;
        service1Client = new Service1Client(endpointConfiguration);

        string Data = service1Client.GetDataAsync(); //This is where I'm getting my error.
  

Почему я получаю эту ошибку? Метод задан как строка, и я пытаюсь присвоить его строке.

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

1. string GetData() или Senator[] GetData(); ? Какой из них правильный? Вы подтвердили, что у клиента сгенерирован последний код?

2. Ну, очевидно, что GetDataAsync метод ничего не возвращает (т. Е. он есть void ), но вы ожидаете, что это будет строка.

3. Это string getData(). Я забыл изменить контракт на операцию, который я опубликовал здесь, потому что мне пришлось изменить именно то, что это было. Я также проверил, чтобы подтвердить, что у клиента был последний сгенерированный код, обновив ссылку на службу.

4. @DavidG где для него установлено значение void? Или как для него установлено значение void? Каким образом я могу настроить его на возврат строки?

Ответ №1:

для асинхронности вам нужно добавить событие GetDataCompleted и метод.

 service1Client.GetDataCompleted  = service1Client_GetDataCompleted;
public void service1Client_GetDataCompleted(object sender, wsService1.GetDataCompletedEventArgs e)
{
   string Data = e.Result.ToString();
}