WCF希望实施客户端进度更新

时间:2011-02-15 19:26:03

标签: c# asp.net wcf mbunit gallio

我有一个客户端连接并等待命令的双工WCF服务。申请结构如下。

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

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

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

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

由于

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:2)

SOAP错误是一种将错误或故障情况从服务传输到使用者的机制。 SOAP规范包括SOAP错误的定义,在发生错误时为消息体的内容提供结构。这使得所有不同的SOAP堆栈都可以以标准方式发出错误。

FaultException 用于将无类型的故障数据发送回消费者。

FaultException<TDetail> 用于将类型化故障数据发送回客户端的通用版本,其中TDetail表示要将序列化回消费者的详细故障信息的类型参数作为SOAP错误消息。

FaultContractAttribute FaultContractAttribute也在System.ServiceModel中定义,它使服务开发人员能够声明如果出现问题,给定服务操作可能会发出哪些错误。以下是与使用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;
}
}

*请注意,在此示例中,您可以定义自己的自定义异常类。