0

我有客户端连接并等待命令的双工 WCF 服务。应用程序的结构如下。

GUI(Asp.net)------------>WCF 服务------>WCF 客户端

您可以从 Asp.net 页面运行 Gallio/MB 单元测试。这些被传递给服务,服务要求客户​​端运行测试。这一切都很好。我现在要实现的是使用测试状态更新 Asp.net 应用程序。

因此,如果用户想要运行整个测试程序集,至少我应该知道 Asp.NET 应用程序正在运行哪个测试以及可能完成的测试百分比。

非常感谢有关如何解决此问题/采取何种方法的任何帮助。

谢谢

4

2 回答 2

2

您需要定义一个回调契约并在您的 ASP.Net 网站中实现它。您还需要使用 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每种故障类型的声明。

该属性的构造函数采用一个 Type 对象,该对象用于引用 Detail 对象的 .NET 类型,即您希望与故障捆绑的故障信息详细信息的类型。

[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 回答