我目前正在使用WCF服务和客户端。 直到昨天,该服务工作完美。我可以正常地调用方法以及异步。 但是:然后我添加了一些新的方法到接口和服务类。然后我使用svcutil.exe为客户端生成Service.cs和output.config。 现在异步方法不再返回它们的返回类型,而是一些“Task < [MethodName] Result>”类型。WCF异步方法调用返回响应对象
这是我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
名称空间,并且这些属性的方式较少。
我真的希望有人能帮上忙,我有点绝望。