WCF,WPF,WF是什么东西
WPF的全称是Windows Presentation Foundation,是微软新发布的Vista操作系统的三大核心开发库之一,其主要负责的是图形显示,所以叫Presentation(呈现)。
作为新的图形引擎,WPF是基于DirectX的,当然增加了很多新的功能。其2D和3D引擎的强大看看Vista的界面就明白了,再加上其对Aero图形引擎的支持,更加让你刚到神奇。顺便提一下,Aero是专门为3D桌面开发的引擎,可以让桌面实现神奇的3D翻转,这绝对是操作系统有史以来的一次神奇尝试,虽然对硬件配置的要求也是惊人的,此前已有相关报道称,Vista对显卡十分挑剔就是出于运行Aero的考虑。
Windows通信基础(Windows Communication Foundation,WCF)是基于Windows平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。WCF为服务提供了运行时环境(Runtime Environment),使得开发者能够将CLR类型公开为服务,又能够以CLR类型的方式使用服务。理论上讲,创建服务并不一定需要WCF,但实际上,使用WCF却可以使得创建服务的任务事半功倍。WCF是微软对一系列产业标准定义的实现,包括服务交互、类型转换、封送(Marshaling)以及各种协议的管理。
Windows Workflow Foundation(WF):工作流引擎,基于工作流的开发使程序的业务逻辑与代码相分离,从而可以大大提高软件开发的效率。
Windows Communication Foundation(WCF): 用于实现应用程序间(包含不同语言开发的程序)通信的技术,WCF构建在SOAP协议之上。
Windows Presentation Foundation(WPF):集成WebForm与WinForm于一体的界面开发方案
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:
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData();
}
添加类Service1:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->1 public class Service1 : IService1
{
public string GetData()
{
return string.Format("Hello World");
}
}
App.config配置:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="WCFProject.Service1" behaviorConfiguration="metadata">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8001/Service1"/>
</baseAddresses>
</host>
<!--The BasicHttpBinding is used because the Workflow uses a generated ASP.Net proxy to communicate with this service-->
<endpoint binding="basicHttpBinding" contract="WCFProject.IService1"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadata">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 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 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 using (ServiceHost host = new ServiceHost(typeof(Service1)))
{
host.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
}
最熟悉的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事件中添加下面代码:
IDictionary<string, object> results = WorkflowInvoker.Invoke(new Activity1());
MessageBox.Show(results["returnValue"].ToString());
这样WPFProject 也完成了。
调试与结果:
启动WCPProject,如下图:
启动WPFProject。点击Invoke Workflow,结果如下图:
![](https://img-my.csdn.net/uploads/201205/25/1337911761_9788.png)
总结:
结合了WPF、WCF、WF实现了Hello world程序。
这篇文章用最简单Hello World程序教你使用了三种最新技术。是不是值得你推荐一下,谢谢。:)
代码:点击打开链接
作者:朱祁林
出处:http://zhuqil.cnblogs.com