#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();
}