计算器客户端示例
计算器客户端应用程序是一个基于 Windows Presentation Foundation (WPF) 的应用程序,可用于将操作发送到计算器状态机服务或持久性计算器服务。计算器服务可以与不同的协议一起使用,如启用 Cookie 的 WSHttpContextBinding 或 WsHttpBinding 绑定。您可以在绑定之间进行切换并仍与同一个工作流服务实例进行通信。
提示
此示例需要安装 .NET Framework 3.5 版才能生成和运行。若要打开项目和解决方案文件,需要使用 Visual Studio 2008。
您还可以打开计算器、执行操作然后关闭计算器应用程序而不关闭该客户端应用程序。然后可以打开计算器,计算器将会与先前与其通信的工作流示例进行通信。上下文存储在名为 Context.ctx 的文件中,该文件存储在计算器客户端应用程序的 \bin 目录中。若要重新启动计算器客户端应用程序,可以删除 Client.ctx 文件。
有关 设置此示例的更多信息,请参见 One-time Setup Procedure for Windows Communication Foundation Samples。
下面的代码演示 ICalculator
服务协定。
[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
[OperationContract()]
int PowerOn();
[OperationContract()]
int Add(int value);
[OperationContract()]
int Subtract(int value);
[OperationContract()]
int Multiply(int value);
[OperationContract()]
int Divide(int value);
[OperationContract()]
void PowerOff();
}
安装计算器
确保按照各个示例中的说明将状态机工作流服务示例或Durable Workflow Services Sample承载于 Internet Information Services (IIS) 6.0 中。所安装的服务的 Service.svc 和 Web.config 文件位于 %systemdrive%\intetpub\wwwroot\ServiceModelSamples 目录中。Service.dll 文件位于 %systemdrive%\intetpub\wwwroot\ServiceModelSamples\bin 目录中。
下载并保存工作流服务实用工具,使 CalculatorClient 和 WorkflowServiceUtility 文件夹位于同一个父文件夹中。
确保正确创建工作流服务引用。如果在打开解决方案时未定义工作流服务引用,请重新创建该引用。通过将浏览器指向相应的地址 https://localhost/ServiceModelSamples/service.svc,还可以查看状态机工作流服务或持久性计算器服务的 Web 服务描述语言 (WSDL)。若要查看 WSDL,请指向 https://localhost/ServiceModelSamples/service.svc?wsdl。
计算器客户端演示如何在保持状态的同时与服务通信,以便在重新启动对话时服务仍能够继续。若要使用计算器,请输入数字和要执行的操作。计算器客户端与之通信的服务使用上一次操作的结果执行指定的操作。启动时,上一次操作的结果为 0。例如,如果启动计算器客户端并输入数字 2,然后输入加法运算 (+),则服务会对上一次操作的结果(在本例中为 0)加 2。计算器然后显示结果 (2)。如果随后输入 3 和加法运算 (+),则会将数字 3 加到上次操作的结果 (2),结果为 5。等号 (=) 会向上一次操作的结果加 0。在前面的示例中,如果您输入数字 2 然后输入等号,则计算器会向上次操作的结果 (5) 加 0,并返回 5。
如果您终止然后重新启动该客户端,则计算器上会显示上次操作的结果。您可以从该点开始继续执行运算。
在进行第一次调用时,计算器客户端使用 Client.ctx 文本文件将上下文存储在一个持久位置(在本例中,存储在示例的 \bin 目录中)。重新打开客户端时,此客户端将检查文件是否存在。如果文件存在,则客户端会将存储的上下文应用于要创建的通道。如果工作流服务已经完成并且您打开了此客户端,而 Context.ctx 文件仍在您的 \bin 目录中,则计算器客户端将尝试对通道应用上下文。您将收到错误,因为不存在要与其进行通信的工作流实例。请删除文件并重试。