0

クライアントが接続してコマンドを待機する二重 WCF サービスがあります。アプリの構成は以下の通りです。

GUI(Asp.net)------------>WCF サービス----------------->WCF クライアント

Asp.net ページから、Gallio/MB ユニット テストを実行できます。これらはサービスに渡され、サービスはクライアントにテストの実行を要求します。それはすべてうまくいっています。今実装したいのは、Asp.net アプリケーションをテストのステータスで更新することです。

したがって、ユーザーがテストのアセンブリ全体を実行したい場合、少なくとも実行中のテストと、おそらく完了したテストの割合を Asp.NET アプリケーションで知る必要があります。

これについてどのように対処するか、どのようなアプローチを取るべきかについての助けをいただければ幸いです。

ありがとう

4

2 に答える 2

2

コールバック コントラクトを定義し、ASP.Net Web サイトに実装する必要があります。二重操作のサポートを追加するには、wsDualHttpBinding も使用する必要があります。

public interface ITransferAck{
    [OperationContract(IsOneWay = true)]
    void TransferRecordResendRequest(int transferId); 
}
[ServiceContract(CallbackContract=typeof(ITransferAck))]
public interface IBankTransfer{
    [OperationContract(IsOneWay=true)]
    void ExchangeTransferRecord(int transferId, string record);
}

次のコード例に示すように、サービスは、OperationContext から取得したプロキシ参照を介してクライアント アプリケーションと通信します。

client = OperationContext.Current.GetCallbackChannel<ITransferAck>(); 

client.TransferRecordResendRequest(1); 
于 2011-02-15T19:29:47.493 に答える
2

SOAP 障害は、エラーまたは障害の状態をサービスからコンシューマーに転送するためのメカニズムです。SOAP 仕様には、SOAP 障害の定義が含まれており、エラーが発生した場合のメッセージ本文の内容に構造を提供します。これにより、すべての異なる SOAP スタックが標準的な方法で障害を発行できるようになります。

FaultException型指定されていない障害データをコンシューマに送り返すために使用されます。

FaultException<TDetail>型指定された障害データをクライアントに送り返すために使用される汎用バージョン。ここで、TDetail は、SOAP 障害メッセージの一部としてコンシューマーにシリアル化される詳細な障害情報の型パラメーターを表します。

System.ServiceModel にも定義されているFaultContractAttributeFaultContractAttribute を使用すると、サービス開発者は、問題が発生した場合に特定のサービス操作が発行する可能性のあるエラーを宣言できます。以下は、FaultContractAttribute の操作に関連する重要な情報です。

この属性は操作にのみ適用できます。
属性は継承されません。
この属性は複数回適用できます。たとえば、サービス操作がさまざまな種類のエラーを返す可能性がある場合は、エラーの種類FaultContractAttributeごとに宣言を行います。

属性のコンストラクターは、Detail オブジェクトの .NET 型、つまり、障害にバンドルする障害情報の詳細の型を参照するために使用される Type オブジェクトを受け取ります。

[ServiceContract()]
public interface ICalculatorService{
[OperationContract()]
[FaultContract(typeof(string))]
double Divide(double numerator, double denominator);
}
public class CalculatorService : ICalculatorService {
public double Divide(double numerator, double denominator) {
if (denominator == 0.0d) {
string faultDetail = "You cannot divide by zero";
throw new FaultException<string>(faultDetail);
}
return numerator / denominator;
}
}

*この例の文字列クラスの代わりに、独自のカスタム例外クラスを定義できることに注意してください。

于 2011-02-15T20:20:02.420 に答える