WF通信

本文介绍了Windows Workflow Foundation (WF)中的通信机制,包括通过参数传递信息、使用本地通信服务进行交互及内置通信活动的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SOURCE:http://www.cnblogs.com/wh19890605/archive/2008/11/06/1328477.html

 

     [上一节]

     今天我们来介绍下工作流的通信。假设有这样一个场景,有一个应用程序,当用户输入想保存一个信息的时候,系统要向用户发送一条信息确认是否保存此信息,根据用户的选择执行保存或其他操作。

    我们可以利用WF内置的一些服务和活动实现此场景。

     首先介绍几个概念:

     1.    参数:传递参数最简单的方法就是在工作流实力创建期间传递。代码如下:     

Code
 
 
注意:工作流中必须有包含set访问修饰符的属性与添加到集合中的关键字相对应。     

因为集合是在工作流启动之前传递的,所以此方法不能用来和已经运行的工作流通信,只适合初始化工作流信息。

同样也可以将参数从工作流传递给它的宿主。代码如下:

 

Code

 

注意:工作流中必须有包含get访问修饰符的属性与添加到集合中的关键字相对应。   

     2.     本地通信服务

     预定义一个接口,当工作流想告诉宿主某些消息的时候,它会调用接口中的某个方法,当宿主有消息要发给工作流的时候,它会触发接口中的事件,工作流会处理这个事件。

     ExternalDataExchangeService:这个类用来管理所有的通信服务类。必须将这个类的实例添加到工作流的运行时中才能使用本地通信服务。代码如下:

Code

 

     ExternalDataExchangeAttribute: 将接口标记工作流本地服务的接口。代码如下:

Code

     

     ExternalDataEventArgs:当触发工作流活动事件的时候,随之发送的数据。代码如下:

 

 

Code


     注意:1.属性必须加上Serializable属性,

             2.构造函数中的的instanceID是必须的,用来唯一标识一个工作流实例。

 

      下面介绍几个WF内置的通信活动

     1.     CallExternalMethodActivity:可以用来在工作流运行时向外界发送工作流内部的属性。要想使用这个活动,只需要设置两个属性即可。

           首先,设置InterfaceType属性。如图:

     

 

     从这里可以选择程序中预定义的接口。

     然后设置MethodName属性,指定调用接口的哪个方法。如图:

     

     

     选择的方法不同,属性也随之发生改变,绑定好属性这个活动就可以使用了。

     2.     HandleExternalEventActivity: 用来处理工作流宿主触发的事件。和CallExternalMethodActivity相同,它也有InterfaceType和MethodName属性,按照上面的方法设置好属性就可以正常使用了。

 

     本节我们介绍了有关工作流通信的几个概念和WF内置的两个活动。下一节中,我们将做个通信的简单例子。

### WF490RE 设备通信协议和方式 针对WF490RE设备的通信方法,虽然提供的参考资料未直接提及该特定型号设备的信息,但从一般工业控制设备的角度出发,这类设备通常采用标准化的通信接口和技术来实现数据交换。 #### 1. 支持的标准通信协议 大多数现代自动化设备支持多种标准通信协议,以便于与其他系统集成。对于类似WF490RE这样的设备而言,常见的通信协议可能包括但不限于: - **Modbus TCP/IP**: 这是一种广泛应用在网络上的开放式协议,允许不同制造商生产的控制系统之间相互通信[^2]。 - **Profinet IO (Process Field Net Industrial Ethernet)**: Profinet是基于以太网技术的一种实时工业网络标准,适用于高速度高精度的应用场景[^3]。 - **Ethernet/IP**: 此协议也是建立在以太网上面的一个开放型网络架构,旨在提供高效的数据传输能力以及良好的互操作性[^4]。 #### 2. 物理连接方式 除了软件层面的支持外,物理层面上也可能存在不同的端口设计用来适应各种环境需求: - **RJ45 接头**:用于连接到局域网(LAN),通过双绞线电缆进行信号传递; - **光纤接口**:当需要更远距离或者更高带宽时可以选择这种方式; - **无线模块**:某些情况下为了简化布线或是提高灵活性会配备Wi-Fi或其他形式的无线电通讯组件。 ```python import socket def establish_connection(ip_address, port): """创建TCP客户端""" client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: client_socket.connect((ip_address, int(port))) print(f"成功连接至 {ip_address}:{port}") except Exception as e: print(f"无法连接服务器: {e}") establish_connection('192.168.1.10', '502') # 假设使用 Modbus TCP 协议,默认端口号为502 ``` 上述代码展示了如何利用Python脚本简单地建立起与目标机器之间的TCP连接,这里假设选择了`Modbus TCP/IP`作为主要交流手段之一,并指定了相应的IP地址及端口号来进行测试性的握手动作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值