逐步使用 wpf+wcf+wf 编写“Hello World”程序
逐步使用 wpf+wcf+wf 编写“Hello World”程序
引言
在我的开发中,我使用 WF 来处理业务逻辑,使用 WPF 来处理 UI,使用 WCF 来进行通信。
昨天,我看到一篇文章:WCF、WPF、WF 是什么?谁能给我一个简要介绍?,所以我想写一篇文章来表达我的观点。
“Hello World”程序已成为许多人学习的传统第一个程序。所以我决定用 wcf+wpf+wf 来编写这个“Hello World”程序来表达它。
关于代码
这个例子非常简单,只使用了 WPF、WCF、WF 三项新技术。这个例子包含三个项目
WPFProject:一个 WPF 应用程序,用于实现 UI
WFProject:WF4 可用于自定义业务逻辑,在本例中我仅使用它来调用 WCF 服务
WCFProject:一个控制台应用程序,用于获取数据:“hello world”
WPFProject 启动 WFProject 的工作流,WFProject 调用 WCFProject 的 WCF 服务。然后 WCFProject 将“Hello World”返回给 WFProject,最后 WFProject 将“Hello World”返回给 WPFProject 的 UI。实现顺序如下所示
图 1
实现步骤
创建一个新的 WpfApplication、一个新的 ConsoleApplication、一个工作流 ActivityLibrary,总共三个项目,分别命名为:WPFProject、WCFProject、WFProject,如下图所示
图 2
WCFProject
1、因为是控制台应用程序,所以需要添加 System.ServiceModel.dll 引用
图 3
2、为 **契约(Contract)** 添加一个接口 IService1
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData();
}
3、添加一个类 Service1 来实现 IService1
public class Service1 : IService1
{
public string GetData()
{
return string.Format("Hello World");
}
}
4、部署 App.config,为 wcf 服务设置 **地址(Address)** 和 **绑定(Binding)**
<system.serviceModel>
<services>
<service name="WCFProject.Service1" behaviorConfiguration="metadata"> <host>
<baseAddresses>
<add baseAddress="https://:8001/Service1"/>
</baseAddresses>
</host>
<endpoint binding="basicHttpBinding" contract="WCFProject.IService1"/> </service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadata">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
5、在 Program.cs 中添加以下代码来启动 wcf 服务
using (ServiceHost host = new ServiceHost(typeof(Service1)))
{
host.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press to terminate service.");
Console.ReadLine();
}
WFProject:
如果您不熟悉 WF,请参阅此http://msdn.microsoft.com/library/dd851337.aspx
1、将 SendAndReceiveReply 拖放到 Activity1 中,如下图所示。
图 4
2、Send:我使用此 Send Acitivy 来调用 WCF 服务。请注意。
a)、OperateName:**GetData**。(WCF 方法)
b)、EndPoint :**EndPoint**
c)、Binding :**basichttpBingding**。(WCF 绑定)
d)、ENDPOINTAddress:**New Uri ("****https://:8001/Service1****")** (WCF 地址)
e)、ServiceContractName :**IService1**。(WCF 契约)
3、ReceivReplyForSend:我使用此 ReceivReplyForSend Acitivy 来获取 WCF 服务的返回值
a)、添加一个输出参数:
returnValue
。
图 5
b)、**Content** 如下图所示:
图 6
4、整个工作流如下图所示:
图 7
WPFProject
在此演示中,这个项目非常简单,WPF 和 WF 之间的关系是引用 DLL。WPFProject 引用 WFProject.dll。所以
1、在 WPFProject 中引用 WFProject.dll、System.Activities.dll
图 8
图 9
2、在 MainWindow 窗体中拖放一个按钮,更改 Content:“Invoke Workflow”,在 click 事件中添加以下代码
IDictionary<string, object> results = WorkflowInvoker.Invoke(new Activity1());
MessageBox.Show(results["returnValue"].ToString());
调试
启动 WCFProject,如下图所示
图 10
启动 WPFProject。单击 Invoke Workflow,结果如下图所示
图 12
关注点
本文使用最简单的 Hello World 程序教您使用三种最新的技术。我认为这是一种很好的开发方式
WPF:UI 展示(在客户端)
WF:业务逻辑(在服务端或客户端 )
WCF:数据通信(在服务端)
这是我在 codeproject 上的第一篇文章,我的母语不是英语。希望您能给我一些改进的建议
历史
在此处保持您所做的任何更改或改进的实时更新。