65.9K
CodeProject 正在变化。 阅读更多。
Home

逐步使用 wpf+wcf+wf 编写“Hello World”程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (27投票s)

2010年5月17日

CPOL

3分钟阅读

viewsIcon

97372

downloadIcon

2512

逐步使用 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。实现顺序如下所示

HW1.jpg

图 1

实现步骤

创建一个新的 WpfApplication、一个新的 ConsoleApplication、一个工作流 ActivityLibrary,总共三个项目,分别命名为:WPFProject、WCFProject、WFProject,如下图所示

hwsou.jpg

图 2

WCFProject

1、因为是控制台应用程序,所以需要添加 System.ServiceModel.dll 引用

hwref2.jpg

图 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 中,如下图所示。

hwworlflow1.jpg

图 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

hwpara.jpg

图 5

b)、**Content** 如下图所示:

hw3.png

图 6

4、整个工作流如下图所示:

hwwokflow2.jpg

图 7

WPFProject

在此演示中,这个项目非常简单,WPF 和 WF 之间的关系是引用 DLL。WPFProject 引用 WFProject.dll。所以

1、在 WPFProject 中引用 WFProject.dll、System.Activities.dll

hw5.png

图 8

hwref.jpg

图 9

2、在 MainWindow 窗体中拖放一个按钮,更改 Content:“Invoke Workflow”,在 click 事件中添加以下代码

           IDictionary<string, object> results = WorkflowInvoker.Invoke(new Activity1());
            MessageBox.Show(results["returnValue"].ToString()); 

调试

启动 WCFProject,如下图所示

hw6.png

图 10

启动 WPFProject。单击 Invoke Workflow,结果如下图所示

hw7.png

图 12

关注点

本文使用最简单的 Hello World 程序教您使用三种最新的技术。我认为这是一种很好的开发方式

WPF:UI 展示(在客户端

WF:业务逻辑(在服务端或客户端

WCF:数据通信(在服务端

这是我在 codeproject 上的第一篇文章,我的母语不是英语。希望您能给我一些改进的建议

历史

在此处保持您所做的任何更改或改进的实时更新。

© . All rights reserved.