WPF、WCF、WF打造Hello World程序

简介:

英文版:http://www.codeproject.com/KB/WF/wcf-wpf-wf-hello-world.aspx

分析篇: 

    Hello World程序作为所有编程语言的起始阶段,Hello World占据着无法改变的地位。本例子很简单,用了WPF、WCF、WF三种还算比较新的技术。这个例子有三个项目:  

    1、WPFProject:WPF应用程序

    2、WCFProject:WCF服务

    3、WFProject:WF流程定义

    执行顺序是WPFProject程序去启动WFProject项目的工作流,WFProject项目去调用WCFProject的WCF服务。接着WCFProject服务将'Hello World'这行编程界最经典的话返回给WFProject,WFProject由将将'Hello World'返回给WPFProject的UI。执行顺序如下图:

实现篇:

    新建一个WpfApplication、一个ConsoleApplication、一个workflow的ActivityLibrary,共三个项目,命名分别为:WPFProject、WCFProject、WFProject,解决方案如下图:

 

    我们就在这些由VS模板生成的代码实现这个Hello world程序,我们尽量地利用这些生成好的代码。

最不熟悉WCF:

    引用System.ServiceModel.dll

    添加接口IService1:

1      [ServiceContract]
2       public   interface  IService1
3      {
4          [OperationContract]
5           string  GetData();
6      }

    添加类Service1:

复制代码
1       public   class  Service1 : IService1
2      {
3           public   string  GetData()
4          {
5               return   string .Format( " Hello World " );
6          }
7      }
复制代码

    App.config配置:

复制代码
 1  <? xml version="1.0" encoding="utf-8"  ?>
 2  < configuration >
 3       < system.serviceModel >
 4           < services >
 5               < service  name ="WCFProject.Service1"  behaviorConfiguration ="metadata" >
 6                   < host >
 7                       < baseAddresses >
 8                           < add  baseAddress ="http://localhost:8001/Service1" />
 9                       </ baseAddresses >
10                   </ host >
11                   <!-- The BasicHttpBinding is used because the Workflow uses a generated ASP.Net proxy to communicate with this service -->
12                   < endpoint  binding ="basicHttpBinding"  contract ="WCFProject.IService1" />
13               </ service >
14           </ services >
15           < behaviors >
16               < serviceBehaviors >
17                   < behavior  name ="metadata" >
18                       <!--  To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment  -->
19                       < serviceMetadata  httpGetEnabled ="true" />
20                       <!--  To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information  -->
21                       < serviceDebug  includeExceptionDetailInFaults ="false" />
22                   </ behavior >
23               </ serviceBehaviors >
24           </ behaviors >
25           < serviceHostingEnvironment  multipleSiteBindingsEnabled ="true"   />
26       </ system.serviceModel >
27  </ configuration >
复制代码

    在Program.cs添加启动WCF服务代码:

复制代码
1               using  (ServiceHost host  =   new  ServiceHost( typeof (Service1)))
2              {
3                  host.Open();
4                  Console.WriteLine( " The service is ready. " );
5                  Console.WriteLine( " Press <ENTER> to terminate service. " );
6 
7                  Console.ReadLine();
8              }
复制代码

     以上实现了一个简单的WCF服务,这样WCFProject就完成了。

最熟悉的WF:

    在Activity1上托一个Sequence,再在Sequence托一个Send活动调用上面定义好的WCF服务。

    添加一个存储返回值的returnValue输出参数。

    Send活动需要知道WCF服务的ABC。故做如下设置。

1、OperateName:GetData(与上面WCF方法名字一致)

2、EndPoint设置为EndPoint

3、Bingding设置为basichttpBingding。

4、EndPointAddress设置为New Uri("http://localhost:8001/Service1"),与在WCFProject的app.config的地址相同

5、ServiceContractName设置为WCF服务的接口名字IService1。

    右击Send活动,选择Create ReceivReply,这样就创建了一个ReceivReply,它需要设置一个属性:点击Content设置如下:

最后流程如下图所示:

这样我们完成了Workflow的项目。

最后的WPF

    由于WPFProject与WFProject是直接引用的关系,故在WPFProject直接引用WFProject的dll,如下图。

    由于要启动WF,故还需添加工作流的System.Activities.dll引用。

    在MainWindow窗体中拖一个按钮,将文本改成:“Invoke Workflow”,在click事件中添加下面代码:

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

    这样WPFProject 也完成了。

调试与结果:

    启动WCPProject,如下图:

    启动WPFProject。点击Invoke Workflow,结果如下图:

 

总结:

    结合了WPF、WCF、WF实现了Hello world程序。

     这篇文章用最简单Hello World程序教你使用了三种最新技术。是不是值得你推荐一下,谢谢。:)





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/05/14/Hello-World.html,如需转载请自行联系原作者

相关文章
|
C# Windows
WPF 获取程序路径的一些方法,根据程序路径获取程序集信息
原文:WPF 获取程序路径的一些方法,根据程序路径获取程序集信息 一、WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.
1618 0
|
11月前
|
C#
WPF防止程序多次运行
WPF防止程序多次运行
135 0
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
WPF界面无法正常显示(资源引用,如转换器),但程序正常运行
|
C#
WPF异常捕获,并使程序不崩溃!
原文:WPF异常捕获,并使程序不崩溃! 在.NET中,我们使用try-catch-finally来处理异常。但,当一个Exception抛出,抛出Exception的代码又没有被try包围时,程序就崩溃了。
2086 0
|
Java C# 程序员
WPF程序中的弱事件模式
原文:WPF程序中的弱事件模式 在C#中,得益于强大的GC机制,使得我们开发程序变得非常简单,很多时候我们只需要管使用,而并不需要关心什么时候释放资源。但是,GC有的时并不是按照我们所期望的方式工作。 例如,我想实现一个在窗口的标题栏中实时显示当前的时间,一个比较常规的做法如下:     var...
1086 0
|
C# Windows
使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等
原文:使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等      WPF预设有Aero, Classic, Luna, Royale主题, WPF程序会根据Windows主...
1230 0
|
C#
#747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation)
原文:#747 –在WPF程序的触摸操作中使用惯性移动 (Implementing Inertia during Touch Manipulation) 原文地址:https://wpf.2000things.com/2013/02/01/747-implementing-inertia-during-touch-manipulation/ 在WPF触摸操作滑动控件的时候,有的时候希望控件能够在手指离开控件后依照惯性继续滑动,直至慢慢减速停止。
1021 0
|
C#
c# 守护进程,WPF程序自守护
原文:c# 守护进程,WPF程序自守护 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/lwwl12/article/details/79035246 如何防止wpf程序异常关闭,守护进程是暂时能想到的最好方式。
2671 0
|
C# 开发者
WPF 程序无法触摸操作?我们一起来找原因和解决方法!
原文:WPF 程序无法触摸操作?我们一起来找原因和解决方法! 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1251 0
|
C#
最新用WPF为触摸屏写了一个手写程序,双格输入的
原文:最新用WPF为触摸屏写了一个手写程序,双格输入的 双格输入可以提高手写速度,当前字写完以后可以自动识别提交,写下一个字。
1062 0