В настоящее время я работаю над сервисом WCF и его потребителем. До вчерашнего дня служба работала отлично. Я мог бы вызвать методы как обычно, так и асинхронные. Но: Затем я добавил несколько новых методов в интерфейс и класс сервиса. Затем я использовал svcutil.exe для создания Service.cs и output.config для клиента. Теперь методы async больше не возвращают возвращаемый тип, а некоторые «Задача < [Имя метода] Результат».Вызов метода WCF Async возвращает объект ответа
Это как мой IService.cs выглядит следующим образом:
public interface IService{
[OperationContract]
string GetData(int value);
[OperationContract]
LoginResultSet TryUserLogin(int clientID, string inputValue);
[OperationContract]
LoginResultSet TryClientLogin(string computerName);
[OperationContract]
bool IsClientLoggedIn(int clientID);
[OperationContract]
LoginResultSet TryClientLogout(int clientID);
[OperationContract]
LoginResultSet TryUserLogout(int clientID, UserClass user);
[OperationContract]
DataTable GetTestJU(int index);
[OperationContract]
DataTable GetJUHistory(UserClass user, int maxCount);
[OperationContract]
DataTable GetJU(UserClass user, string inputValue);}
Проблема начинается уже при входе в систему. В предыдущей версии моего генерируемого Service.cs TryUserLogin и TryUserLoginAsync метода выглядели следующим образом:
public LoginResultSet TryUserLogin(int ClientID, string InputValue)
{
return base.Channel.TryUserLogin(ClientID, InputValue);
}
public System.Threading.Tasks.Task<LoginResultSet> TryUserLoginAsync(int ClientID, string InputValue)
{
return base.Channel.TryUserLoginAsync(ClientID, InputValue);
}
, который прекрасно работают.
Но в новом Service.cs я получаю это:
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
TryUserLoginResponse IService.TryUserLogin(TryUserLoginRequest request)
{
return base.Channel.TryUserLogin(request);
}
public LoginResultSet TryUserLogin(int clientID, string inputValue)
{
TryUserLoginRequest inValue = new TryUserLoginRequest();
inValue.clientID = clientID;
inValue.inputValue = inputValue;
TryUserLoginResponse retVal = ((IService)(this)).TryUserLogin(inValue);
return retVal.TryUserLoginResult;
}
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
System.Threading.Tasks.Task<TryUserLoginResponse> IService.TryUserLoginAsync(TryUserLoginRequest request)
{
return base.Channel.TryUserLoginAsync(request);
}
public System.Threading.Tasks.Task<TryUserLoginResponse> TryUserLoginAsync(int clientID, string inputValue)
{
TryUserLoginRequest inValue = new TryUserLoginRequest();
inValue.clientID = clientID;
inValue.inputValue = inputValue;
return ((IService)(this)).TryUserLoginAsync(inValue);
}
Я совершенно не знаю, что я делаю неправильно. Я заметил, что в новом Service.cs атрибуты перед методами всегда относятся к пространству имен System.ComponentModel
, тогда как в старой (рабочей) атрибуты были из пространства имен System.Runtime.Serialization
, и было меньше этих атрибутов.
Я действительно надеюсь, что кто-то может помочь, я отчасти отчаялся.