現在、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がどのように見えるかです。完璧に働いていた
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の以前バージョンTryUserLoginとTryUserLoginAsyncで方法は、このように見えました。
しかし、新しい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
という名前空間にあり、その属性が少ないことに気付きました。
本当に誰かが助けてくれることを願っています。私は絶望的です。