2016-09-28 3 views
0

현재 WCF 서비스와 클라이언트를 사용하고 있습니다. 어제까지 서비스가 완벽하게 작동했습니다. 나는 비동기와 마찬가지로 메소드를 정상적으로 호출 할 수있다. 하지만 다음 : 인터페이스와 서비스 클래스에 몇 가지 새로운 메소드를 추가했습니다. 그런 다음 svcutil.exe를 사용하여 클라이언트의 Service.cs 및 output.config를 생성했습니다. 이제 비동기 메서드는 반환 형식을 반환하지 않지만 일부는 "작업 < [MethodName] Result>"형식을 반환합니다.WCF 비동기 메서드 호출이 응답 개체를 반환합니다.

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

문제는 로그인 이미 시작 :

이처럼 내 IService.cs 보이는 방법이다. 내 생성 Service.cs의 이전 버전에서 TryUserLoginTryUserLoginAsync 방법은 다음과 같이 보았다 : 완벽하게하는 작업했다

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 네임 스페이스에서 해당 특성이 적음을 알게되었습니다.

정말 도움이되기를 바랍니다. 절망적입니다.

답변

0

나는 여전히 반환 값이 문제가 왜 아무 생각이 없다,하지만 난 이런 식으로, 내 자신의 작업을 구축하고 "정상적인"로그인 방법을 사용하여 문제를 방지하고 있습니다 :

LoginResultSet result = new LoginResultSet(); 
Task<LoginResultSet> loginTask = new Task<LoginResultSet>(() => 
{ 
    return WCFClient.TryClientLogin(Environment.MachineName); 
}); 
loginTask.Start(); 
await Task.WhenAll(loginTask); 

result = loginTask.Result; 

그럼에도 불구하고 나는 정말로 생성 된 파일을 수정하기위한 해결책에 관심이있다.

관련 문제