花了两天时间学习使用WF,把一些遇到的问题记录下来,使用的环境是VS2017,网上的资料普遍太老了

需要注意,如果使用多项目同时启动的方式需要把WCF调整到WF启动顺序之上

1.怎么使用代码活动

新建代码活动,重新生成解决方案
随后自己的代码活动便会出现在工具箱中
如下图

 工具箱名称为WF项目名称

 随后拖入活动中使用即可

2.使用switch时注意不加双引号,见图

编程习惯所以一开始加上双引号结果无法正常运行,然后鬼使神差的去掉了引号就可以了,
不明所以,望周知,感谢

3.变量传递

在参数中定义输入、输出的参数,即参数传递的方向,一看便知,不细讲了

在变量中定义需要用到的局部变量,可以设置作用域

命名空间,一看便知


4.代码活动的输入参数和返回值

下图为代码活动中对参数的处理,见名知意,In为输入,Out为输出
通过使用上下文对象来设置输出的值【.context.SetValue(对象名,值);

调用位置传参方式

需要注意,如果定义的是输入的变量,那这里设置的属性就是传递进来的值,

反之就是传出的值


5.调用WCF传递参数并获得返回值


使用send发送请求,receive获取信息,这里的receive可以直接右键创建ReceiveReply,会自动帮我们填写一些信息

另外,如果wcf提供的是有返回值的接口,此处是一定要有receive的,反之如果没有返回值这里设置了读取返回信息

同样会报错,需要注意几个值,如下图,OperationName为WCF公开的方法名,ServiceContractName为契约名。
还需要设置Endpoint属性,如图。选择使用的协议以及地址
 

参数设置

点击查看参数

选择参数,此处value为传递给wcf的参数名,使用wcf中定义的名称和类型

返回的receive中的设置也是如此,不过需要注意的是此处的参数名称命名规则为W【CF公开的方法名称+Result】

如前图可以看到定义的是GetData,所以此处是【GetDataResult】,可以通过指派,将返回值传递给外部变量

6.主调函数调用活动、传递参数与获取返回值

            Activity workflow1 = new Workflow1();
//使用字典传参
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("tic", "");
//启动活动并获得返回值,返回值也是字典
var result = WorkflowInvoker.Invoke(workflow1,dic);
       //此处的result和resu为定义的返回值
Console.WriteLine(result["result"].ToString()+
result["resu"].ToString());

7.获取out参数

[Out参数]可在实例的[OnCompleted]事件中用[WorkflowApplicationCompletedEventArgs.Outputs]得到 

8.WF请求数据

可将数据存入InstancePromotedPropertiesTable表中,最多存储64个数据项

实例:下载

下一篇:.net WCF WF4.5 状态机、书签与持久化

.net WCF WF4.5的更多相关文章

  1. .net WCF WF4.5 状态机、书签与持久化

    想看源码请直接翻到最后,使用方式如下图 如果同时需要多个书签可以直接在需要的位置创建书签,会认为是同一个实例. 若需要实现的效果是同时需要好几个部门审核,那么只要在对应的位置同时创建多个书签即可. 编 ...

  2. WCF使用相关

    1.不显示WCF服务主机 在WCF项目属性中的WCF选项卡总关闭下图的选项 2.在其他项目中承载WCF服务 其他加载的操作一致,需要把WCF的endpoint和behavior节点复制到 启动服务的那 ...

  3. [WF4.0 实战] WPF + WCF + WF 打造Hello World(基础篇)

    本篇博客是一个基础的演示样例,也就是一个新手教程吧!让大家熟悉一下WPF + WCF + WF三者的关系!这仅仅是一个基础篇,下篇会继续深入,作为这段时间研究工作流的一个小小总结! 三者关系: WPF ...

  4. 【转】WF4.0实战系列索引

    转自:http://www.cnblogs.com/zhuqil/archive/2010/07/05/wf4-in-action-index.html 此系列的工作流文件案例比较多点,实用性好. W ...

  5. 【转】WF4.0 (基础篇)

    转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter  ——  兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...

  6. WF4.0 基础篇 (一)开始使用WF

    来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...

  7. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  8. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  9. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

随机推荐

  1. May 27. 2018 Week 22nd Sunday

    All things come to those who wait. 苍天不负有心人. It is said that those who are patient can see what their ...

  2. 16.ajax_case02

    # 抓取当当网书评 # http://product.dangdang.com/25340451.html import json import requests from lxml import e ...

  3. http: server gave HTTP response to HTTPS client & Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused

    http: server gave HTTP response to HTTPS client 出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTP ...

  4. 【转】JS中setTimeout和setInterval的最大延时值详解

    前言 JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.而这篇文中主要给大家介绍的是关于JS中setTi ...

  5. 总结 Linux 下安装 PHP 扩展步骤

    总结一下 Linux 下安装 PHP 扩展步骤,这里以安装 PHP 的 redis 扩展为例. 一.拿到扩展包下载地址,下载扩展包 pecl 上搜索 redis wget http://pecl.ph ...

  6. 【vue】vue +element 搭建项目,在使用InputNumber 计数器时遇到的问题

    自己遇到的坑: InputNumber 计数器的change事件定义时如果不传入参数value,会产生this.num不同步的问题 <template> <el-input-numb ...

  7. mybatis 常用

    1.新增时获得主键 <insert ...> <selectKey resultType="java.lang.Integer" keyProperty=&quo ...

  8. JS上传文件、导入文件

    //开始导入 function Import() { var filepath = $('#txtUpload').val(); //校验是否选择表格 if (filepath == '') { $( ...

  9. template 与 host , item trigger的关系

    1.host关联template的关系 .Host可以连接到一个或多个模板. Template具有继承关系,可以从一个Template link到另外一个Template. . Host和Templa ...

  10. CRC-16 (Modbus)

    typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; #defi ...