NetTcpデュプレックスチャネルを使用するサーバー/クライアントがあり、モノラル(v2.10.8)で実行するために必要な作業量を把握しようとしています。
誰かがmonoで実行されているクライアントにFaultExceptionを正しくスローする方法を教えてもらえますか?または、これが完全にサポートされていない場合はどうなりますか?
契約は次のように定義されます。
[OperationContract(IsInitiating = true)]
[FaultContract(typeof(IOException))]
string ConnectWithFault(string clientVersion, string workstation)
サーバー側のメソッドは、テスト目的で常に障害を生成します。
public string ConnectWithFault(string clientVersion, string workstation)
{
IOException ioe = new IOException("Testing Fault Contract");
throw new FaultException<IOException>(ioe, new FaultReason(ioe.Message), new FaultCode("Sender"));
return "Should Never Reach Here!";
}
クライアントを通常のウィンドウで実行するとすべて正常に動作しますが、Windowsでモノラルコマンドプロンプトでクライアントを実行すると、FaultExceptionがクライアントに届くように見えますが、正しくキャッチできません。または、クライアント側でFaultExceptionをキャッチしようとしたときに、内部モノエラーが発生しますか?私が捕まえようとしたのは、いくつかの異なる装いです。
public void TestConnectWithFault()
{
Console.WriteLine("Client->TestConnectWithFault() +");
try
{
string response = RemoteSessionChannel.ConnectWithFault("client1.0", "MY-PC");
Console.WriteLine("**** DuplexClient->Connect Response: {0}", response);
}
catch (FaultException<IOException> ioe)
{
Console.WriteLine("Connect failed. (IOException): {0}", ioe.ToString());
}
catch (FaultException fe)
{
Console.WriteLine("Connect failed. (FaultException): {0}", fe.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Connect failed. (Exception): {0}", ex.ToString());
}
Console.WriteLine("Client->TestConnectWithFault() -");
}
しかし、私は常にクライアントコンソールで次の出力を取得し、クライアントがハングします。
Client->TestConnectWithFault() +
**System.ServiceModel.FaultException: Testing Fault Contract
at System.ServiceModel.MonoInternal.DuplexClientRuntimeChannel.ProcessInputCor
e (IInputChannel input, System.ServiceModel.Channels.Message message) [0x00000]
in <filename unknown>:0
at System.ServiceModel.MonoInternal.DuplexClientRuntimeChannel.ProcessInput (I
InputChannel input, System.ServiceModel.Channels.Message message) [0x00000] in <
filename unknown>:0**
したがって、例外がクライアントに発生しているように見えますが、どのキャッチブロックにも検出されていないか、これが正しくありませんか?