角色:WebWorkflowRole
WebWorkflowRole使用ASP.NET的用户数据库,但所有数据操作不用人为干预
使用时,要添加对ASP.NET数据库的连接配置
App.config |
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="SqlServerConnection" connectionString="Integrated Security = SSPI;server=WXWINTER\SQLEXPRESS;database=aspnetdb" /> </connectionStrings> <system.web> <roleManager enabled="true" defaultProvider="SqlProvider"> <providers> <add name="SqlProvider" connectionStringName="SqlServerConnection" applicationName="ConsoleAppSample" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b </providers> </roleManager> </system.web> </configuration>
|
一个例子
外部事件
[Serializable] public class 事件参数 : ExternalDataEventArgs { private string 存值; public string 自定义属性 { get { return this.存值; } set { this.存值 = value; } }
public 事件参数() : base(Guid.NewGuid()) { }
public 事件参数(Guid instanceId, string 值参数) : base(instanceId) { this.存值 = 值参数;
} }
[ExternalDataExchangeAttribute()] public interface 外部事件接口 { event EventHandler<事件参数> 一个外部事件; }
public class 实现类 : 外部事件接口 { public event EventHandler<事件参数> 一个外部事件;
public void 触发事件(Guid instanceId, string 值参数, IIdentity 用户参数) { 事件参数 e = new 事件参数(instanceId,值参数);
String 安全标置 = null;
WindowsIdentity 用户 = 用户参数 as WindowsIdentity;
if (用户 != null && 用户.User != null) { 安全标置 = 用户.User.Translate(typeof(NTAccount)).ToString(); } else if (用户参数 != null) { 安全标置 = 用户参数.Name; }
e.Identity = 安全标置;
Console.WriteLine("外部事件已执行,用户:", 用户参数.Name);
if (一个外部事件 != null) { 一个外部事件("sender:wxwinter", e); } } }
|
工作流中为结点设定角色
Roles属性映射
|
WebWorkflowRole 要添加的角色 = new WebWorkflowRole("aspnetdb数据库中的角色名"); 角色.Add(要添加的角色); |
宿主中使用aspnetdb数据库中的用户触发外部事件
Dim 用户 As System.Security.Principal.GenericIdentity = New Security.Principal.GenericIdentity("aspnetdb数据库中的角色名") 外部对象.触发事件(当前操作的实例.InstanceId, DateTime.Now.ToString(), 用户) |
本例中宿主是EXE程序
本例收于 WWF调试模板(3) 中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构