• WPFWCFWF打造HelloWorld程序


    英文版: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 也完成了物流配货网http://wlphw.com/ QQ在线:471226865点击这里给我发消息

    调试与结果:

    启动WCPProject,如下图:

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

    总结:

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

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

    代码/Files/zhuqil/wpfwcfwf.rar

    作者:朱祁林
    出处:http://zhuqil.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    subString用法
    [转]Apache Commons工具集简介
    MyEclipse发布项目更改项目名
    ubuntu下设置文件权限
    mysql数据库中实现内连接、左连接、右连接
    hibernate中onetomany实例一
    hibernate中manytoone实例一
    FireFox中使用ExtJs日期控件错误的解决方法
    Ext.ux.form.SearchField使用方法
    mysql kill操作
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2575363.html
Copyright © 2020-2023  润新知