private static JobBase CreateInvokeServiceJob() { InvokeWebServiceJob job = new InvokeWebServiceJob(); job.JobID = UuidHelper.NewUuidString(); job.Name = "即时服务调用"; job.SvcOperationDefs = new WfServiceOperationDefinitionCollection(); job.LastStartExecuteTime = DateTime.Now.AddMinutes(-5); job.Category = "单元测试"; WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/Services/PermissionCenterToADService.asmx"); WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter() { Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID" }); WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, "GetVersion", parameters, string.Empty); serviceDef.RtnXmlStoreParamName = "Version"; serviceDef.Timeout = TimeSpan.FromSeconds(30); job.SvcOperationDefs.Add(serviceDef); return(job); }
protected void Page_Load(object sender, EventArgs e) { WfConverterHelper.RegisterConverters(); WfServiceOperationDefinition svcOpDef = new WfServiceOperationDefinition(); hiddenSvcOperationTemplate.Value = JSONSerializerExecute.Serialize(svcOpDef); var dataTypeList = EnumItemDescriptionAttribute.GetDescriptionList(typeof(WfSvcOperationParameterType)); dataTypeDropDownList.DataSource = dataTypeList; dataTypeDropDownList.DataTextField = "Name"; dataTypeDropDownList.DataValueField = "EnumValue"; dataTypeDropDownList.DataBind(); if (Request["hasRtn"] == "false") { this.trRtn.Style["display"] = "none"; } if (!string.IsNullOrEmpty(Request["initPara"])) { var initData = new WfServiceOperationParameterCollection(); initData.Add(new WfServiceOperationParameter() { Name = Request["initPara"], Type = WfSvcOperationParameterType.RuntimeParameter, Value = "" }); detailGrid.InitialData = initData; } }
private WfServiceOperationDefinition GetWfServiceOperationDefinition(string functionName, string servicAddressKey) { WfServiceAddressDefinition serviceAddressDef = WfGlobalParameters.Default.ServiceAddressDefs[servicAddressKey]; string addressUri = GetWsdlUrl(serviceAddressDef.Address); WebClient wc = new WebClient(); using (Stream stream = wc.OpenRead(addressUri)) { ServiceDescription sd = ServiceDescription.Read(stream); Binding targetBinding = GetBinding(sd, serviceAddressDef.RequestMethod); if (targetBinding == null && serviceAddressDef.RequestMethod == WfServiceRequestMethod.Post) { targetBinding = GetPostableBinding(sd); } if (targetBinding == null) { throw new NotImplementedException("服务不支持此种操作类型" + serviceAddressDef.RequestMethod.ToString()); } Operation operation = GetOperation(sd, targetBinding, functionName); WfServiceOperationParameterCollection reqParameters = GetOperationParams(sd, operation); WfServiceOperationDefinition operationDef = new WfServiceOperationDefinition(serviceAddressDef.Key, functionName, reqParameters, string.Empty); return(operationDef); } }
protected void btnSync_Click(object sender, EventArgs e) { InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.LoadSingleDataByJobID(jobId); if (job == null) { string url = ResourceUriSettings.GetConfig().Paths["pcServiceAdSync"].Uri.ToString(); string methodName = "StartSynchronize"; WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter() { Name = "startPath", Type = WfSvcOperationParameterType.String, Value = "" }); parameters.Add(new WfServiceOperationParameter() { Name = "taskID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "taskID" }); //特殊用法 string name = "AD同步-用户发起"; job = Util.CreateImmediateJob(jobId, name, "PC→AD", url, methodName, parameters); InvokeWebServiceJobAdapter.Instance.Update(job); } //检查是否有任务已经进入执行序列 if (SysTaskAdapter.Instance.Load(w => { w.AppendItem("CATEGORY", "PC→AD"); }).Any()) { BannerNotice notic = (BannerNotice)Master.FindControl("notice"); notic.Text = ("检测到已经存在一个未执行或执行中的同步任务,请等待任务结束或者终止任务后重试。"); } else { SysTask task = job.ToSysTask(); task.Source = MCS.Library.Principal.DeluxeIdentity.CurrentUser; task.Url = this.ResolveUrl("~/lists/ADLog.aspx?id=" + task.TaskID); SysTaskAdapter.Instance.Update(task); } }
protected void btnSync_Click(object sender, EventArgs e) { InvokeWebServiceJob job = InvokeWebServiceJobAdapter.Instance.LoadSingleDataByJobID(JobID); if (job == null) { string url = ResourceUriSettings.GetConfig().Paths["pcServiceAdSync"].Uri.ToString(); string methodName = "StartADReverseSynchronize"; WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter() { Name = "taskID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "taskID" }); //特殊用法 string name = "AD逆同步-用户发起"; job = Util.CreateImmediateJob(JobID, name, "AD→PC", url, methodName, parameters); InvokeWebServiceJobAdapter.Instance.Update(job); } //检查是否有任务已经进入执行序列 if (SysTaskAdapter.Instance.Load(w => { w.AppendItem("CATEGORY", "AD→PC"); }).Any()) { BannerNotice notic = (BannerNotice)Master.FindControl("notice"); notic.Text = ("检测到已经存在一个未执行或执行中的同步任务,请等待任务结束或者终止任务后重试。"); } else { SysTask task = job.ToSysTask(); task.Url = this.ResolveUrl("~/lists/ADReverseLog.aspx?id=" + task.TaskID); task.Source = MCS.Library.Principal.DeluxeIdentity.CurrentUser; SysTaskAdapter.Instance.Update(task); } }
public virtual void DoModifyFileOperations(string rootPath, MaterialFileOeprationInfo fileOperation, MaterialContent content) { var task = new InvokeServiceTask() { TaskID = UuidHelper.NewUuidString(), TaskTitle = string.Format(this.taskTitleTemplate, fileOperation.Material.OriginalName, fileOperation.Material.ID), }; var parameters = new WfServiceOperationParameterCollection { new WfServiceOperationParameter("rootPath", rootPath), new WfServiceOperationParameter("fileOperation", fileOperation.Operation.ToString()), new WfServiceOperationParameter("materialConnectionName", DbConnectionMappingContext.GetMappedConnectionName(MaterialAdapter.Instance.GetConnectionName())), new WfServiceOperationParameter("contentConnectionName", DbConnectionMappingContext.GetMappedConnectionName(MaterialContentAdapter.Instance.ConnectionName)), new WfServiceOperationParameter("materialId", fileOperation.Material.ID), new WfServiceOperationParameter("url", fileOperation.Material.ShowFileUrl) }; task.SvcOperationDefs.Add(new WfServiceOperationDefinition( new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, ResourceUriSettings.GetConfig().Paths[this.resourceUri].Uri.ToString()), "DoFileToDocService", parameters, "ReturnValue") ); DbConnectionMappingContext.DoMappingAction( DbConnectionMappingContext.GetMappedConnectionName(InvokeServiceTaskAdapter.Instance.ConnectionName), InvokeServiceTaskAdapter.Instance.ConnectionName, () => { InvokeServiceTaskAdapter.Instance.Update(task); }); }
private static void ExtractSoapParameters(WfServiceOperationParameterCollection rst, ServiceDescription desc, Message msg) { if (msg.Parts["parameters"] != null) { var ppsElemName = msg.Parts["parameters"].Element; var schema = desc.Types.Schemas[ppsElemName.Namespace]; System.Xml.Schema.XmlSchemaElement innerTypes = (System.Xml.Schema.XmlSchemaElement)schema.Elements[ppsElemName]; System.Xml.Schema.XmlSchemaComplexType xType = innerTypes.SchemaType as System.Xml.Schema.XmlSchemaComplexType; if (xType != null) { System.Xml.Schema.XmlSchemaSequence xSeq = xType.Particle as System.Xml.Schema.XmlSchemaSequence; if (xSeq != null) { foreach (var xItem in xSeq.Items) { if (xItem is System.Xml.Schema.XmlSchemaElement) { System.Xml.Schema.XmlSchemaElement xElem = xItem as System.Xml.Schema.XmlSchemaElement; rst.Add(new WfServiceOperationParameter() { Name = xElem.Name, Type = SolveType(xElem.SchemaTypeName) }); } } } } } }
private WfServiceOperationParameterCollection GetOperationParams(ServiceDescription sd, Operation operation) { WfServiceOperationParameterCollection result = new WfServiceOperationParameterCollection(); if (operation == null) { return(result); } foreach (OperationMessage opMessage in operation.Messages) { if (opMessage is OperationInput) { Message message = sd.Messages[opMessage.Message.Name]; foreach (MessagePart part in message.Parts) { if (!string.IsNullOrEmpty(part.Type.Name)) { result.Add(new WfServiceOperationParameter() { Name = part.Name, Type = WfSvcOperationParameterType.String }); continue; } if (!string.IsNullOrEmpty(part.Element.Name)) { XmlSchemaElement element = GetSchemaElement(sd, part.Element.Name); if (element == null) { continue; } if (element.ElementSchemaType is XmlSchemaComplexType) { List <XmlSchemaElement> members = GetComplexElementMember(element); members.ForEach(p => { result.Add(new WfServiceOperationParameter() { Name = p.Name, Type = MappingWsdlType(p.ElementSchemaType.TypeCode) }); }); } else { result.Add(new WfServiceOperationParameter() { Name = element.Name, Type = MappingWsdlType(element.ElementSchemaType.TypeCode) }); } } } } } return(result); }
protected override void PrepareParameters(WfServiceOperationParameterCollection parameters) { WfServiceOperationParameter ownerActivityIDParam = new WfServiceOperationParameter("ownerActivityID", this.OwnerActivityID); parameters.Add(ownerActivityIDParam); WfServiceOperationParameter transferParams = new WfServiceOperationParameter("branchTransferParams", WfSvcOperationParameterType.RuntimeParameter, "transferParams"); parameters.Add(transferParams); }
protected override void PrepareParameters(WfServiceOperationParameterCollection parameters) { WfServiceOperationParameter processIDParam = new WfServiceOperationParameter("processID", this.ProcessID); parameters.Add(processIDParam); WfServiceOperationParameter processPendingActivityParam = new WfServiceOperationParameter("processPendingActivity", WfSvcOperationParameterType.Boolean, this.ProcessPendingActivity); parameters.Add(processPendingActivityParam); }
protected override void PrepareParameters(WfServiceOperationParameterCollection parameters) { WfServiceOperationParameter processIDParam = new WfServiceOperationParameter("processID", this.ProcessID); parameters.Add(processIDParam); WfServiceOperationParameter cancelAllBranchProcessesParam = new WfServiceOperationParameter("cancelAllBranchProcesses", WfSvcOperationParameterType.Boolean, this.CancelAllBranchProcesses); parameters.Add(cancelAllBranchProcessesParam); }
public WfServiceInvokerFactory() { Url = @"http://localhost/MCSWebApp/WebTestProject/Services/ProcessTestService.asmx"; ParaList = new WfServiceOperationParameterCollection(); Credential = new WfNetworkCredential(); AddressDef = new WfServiceAddressDefinition(WfServiceRequestMethod.Get, Credential, Url); AddressDef.Key = Guid.NewGuid().ToString(); WfGlobalParameters.Default.ServiceAddressDefs.Add(AddressDef); AddressDef.ServiceNS = @"http://tempuri.org/"; SvcOpDef = new WfServiceOperationDefinition(AddressDef.Key, Operation, ParaList, ""); }
protected virtual void InitServiceDefinitions() { WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, string.Empty, WfServiceContentType.Json); this.PrepareAddress(address); WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); WfServiceOperationDefinition definition = new WfServiceOperationDefinition(address, this.GetOperationName(), parameters, "returnValue"); this.PrepareParameters(parameters); this.SvcOperationDefs.Add(definition); }
public static void AreEqual(this WfServiceOperationParameterCollection actual, WfServiceOperationParameterConfigurationElementCollection element) { Assert.AreEqual(actual.Count, element.Count); foreach (WfServiceOperationParameter itemActual in actual) { WfServiceOperationParameterConfigurationElement itemElement = element[itemActual.Name]; Assert.IsNotNull(itemElement); itemActual.AreEqual(itemElement); } }
protected override void PrepareParameters(WfServiceOperationParameterCollection parameters) { WfServiceOperationParameter ownerActivityIDParam = new WfServiceOperationParameter("ownerActivityID", this.OwnerActivityID); parameters.Add(ownerActivityIDParam); WfServiceOperationParameter transferParams = new WfServiceOperationParameter("template", WfSvcOperationParameterType.RuntimeParameter, "template"); parameters.Add(transferParams); WfServiceOperationParameter autoAddExitMaintainingStatusTaskParam = new WfServiceOperationParameter("autoAddExitMaintainingStatusTask", WfSvcOperationParameterType.Boolean, this.AutoAddExitMaintainingStatusTask); parameters.Add(autoAddExitMaintainingStatusTaskParam); }
public void InvokeServiceTaskTest() { //准备Job信息 //调用SysTaskSettings.GetSettings().GetExecutor("InvokeService")执行服务 //检验状态 InvokeWebServiceJob job = new InvokeWebServiceJob() { JobID = UuidHelper.NewUuidString(), JobType = JobType.InvokeService, Category = "测试权限中心服务", Description = "仅用于测试", Enabled = true, Name = "任务和作业的单元测试", SvcOperationDefs = new Workflow.WfServiceOperationDefinitionCollection() }; WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter() { Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID" }); job.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition(new Workflow.WfServiceAddressDefinition(Workflow.WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"), "GetVersion", parameters, string.Empty)); InvokeWebServiceJobAdapter.Instance.Update(job); DO.SysTask task = new DO.SysTask() { TaskID = UuidHelper.NewUuidString(), TaskTitle = "测试任务", ResourceID = job.JobID }; SysTaskAdapter.Instance.Update(task); ISysTaskExecutor executor = SysTaskSettings.GetSettings().GetExecutor("InvokeService"); executor.Execute(task); var task2 = SysTaskAdapter.Instance.Load(task.TaskID); Assert.IsNull(task2); }
private static InvokeServiceTask PrepareTask() { string url = "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx"; DO.InvokeServiceTask task = new DO.InvokeServiceTask() { TaskID = UuidHelper.NewUuidString(), TaskTitle = "新任务", }; WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter("callerID", "InvokeServiceTaskPersistTest")); task.SvcOperationDefs.Add(new Workflow.WfServiceOperationDefinition( new Workflow.WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url), "GetVersion", parameters, "ReturnValue") ); return task; }
/// <summary> /// 准备一个带错误的任务 /// </summary> /// <returns></returns> private static InvokeServiceTask PrepareErrorInvokeServiceTask() { string url = "http://localhost/MCSWebApp/PermissionCenterServices/services/PermissionCenterToADService.asmx-error"; InvokeServiceTask task = new InvokeServiceTask() { TaskID = UuidHelper.NewUuidString(), TaskTitle = "新任务", }; WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter("callerID", "InvokeServiceTaskPersistTest")); task.SvcOperationDefs.Add(new WfServiceOperationDefinition( new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url), "GetVersion", parameters, "ReturnValue") ); return(task); }
public static WfServiceOperationParameterCollection DiscoverParameters(string address, string httpMethod, string method) { WfServiceOperationParameterCollection rst = new WfServiceOperationParameterCollection(); ServiceDescription desc = GetServiceDescription(address); var xMessage = DiscoverMethodMessage(method, httpMethod, desc); if (xMessage != null) { var msg = desc.Messages[xMessage.Name]; if (httpMethod == "Soap") { ExtractSoapParameters(rst, desc, msg); } else { foreach (MessagePart pt in msg.Parts) { rst.Add(new WfServiceOperationParameter() { Name = pt.Name, Type = SolveType(pt.Type) }); } } } else if (httpMethod != "Soap") { //尝试作为SOAP处理 xMessage = DiscoverMethodMessage(method, "Soap", desc); if (xMessage != null) { var msg = desc.Messages[xMessage.Name]; ExtractSoapParameters(rst, desc, msg); } } return(rst); }
public static WfServiceOperationParameterCollection DiscoverParameters(string address, string httpMethod, string method) { WfServiceOperationParameterCollection rst = new WfServiceOperationParameterCollection(); ServiceDescription desc = GetServiceDescription(address); var xMessage = DiscoverMethodMessage(method, httpMethod, desc); if (xMessage != null) { var msg = desc.Messages[xMessage.Name]; if (httpMethod == "Soap") { ExtractSoapParameters(rst, desc, msg); } else { foreach (MessagePart pt in msg.Parts) { rst.Add(new WfServiceOperationParameter() { Name = pt.Name, Type = SolveType(pt.Type) }); } } } else if (httpMethod != "Soap") { //尝试作为SOAP处理 xMessage = DiscoverMethodMessage(method, "Soap", desc); if (xMessage != null) { var msg = desc.Messages[xMessage.Name]; ExtractSoapParameters(rst, desc, msg); } } return rst; }
protected virtual void PrepareParameters(WfServiceOperationParameterCollection parameters) { }
private static JobBase CreateInvokeServiceJob() { InvokeWebServiceJob job = new InvokeWebServiceJob(); job.JobID = UuidHelper.NewUuidString(); job.Name = "即时服务调用"; job.SvcOperationDefs = new WfServiceOperationDefinitionCollection(); job.LastStartExecuteTime = DateTime.Now.AddMinutes(-5); job.Category = "单元测试"; WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, "http://localhost/MCSWebApp/PermissionCenterServices/Services/PermissionCenterToADService.asmx"); WfServiceOperationParameterCollection parameters = new WfServiceOperationParameterCollection(); parameters.Add(new WfServiceOperationParameter() { Name = "callerID", Type = WfSvcOperationParameterType.RuntimeParameter, Value = "callerID" }); WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, "GetVersion", parameters, string.Empty); serviceDef.RtnXmlStoreParamName = "Version"; serviceDef.Timeout = TimeSpan.FromSeconds(30); job.SvcOperationDefs.Add(serviceDef); return job; }
internal static InvokeWebServiceJob CreateImmediateJob(string jobID, string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters) { InvokeWebServiceJob job = new InvokeWebServiceJob(); job.JobID = jobID; job.Category = category; job.Name = name; job.SvcOperationDefs = new WfServiceOperationDefinitionCollection(); WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url); WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, methodName, parameters, string.Empty); serviceDef.Timeout = TimeSpan.FromSeconds(24 * 60 * 60); job.SvcOperationDefs.Add(serviceDef); return job; }
public string CreateSoapEnvelope(WfServiceOperationParameterCollection operationParams) { if (this._SvcOperationDef == null) throw new ArgumentNullException("WfServiceOperationDefinition不能为空!"); if (this._SvcOperationDef.OperationName.IsNullOrEmpty()) throw new ArgumentNullException("OperationName不能为空!"); XNamespace methodNS = this._SvcOperationDef.AddressDef.ServiceNS; XElement operationElement = new XElement(methodNS + this._SvcOperationDef.OperationName); foreach (WfServiceOperationParameter paramDef in operationParams) { XElement paraElement = new XElement(paramDef.Name); if (paramDef.Type == WfSvcOperationParameterType.RuntimeParameter) { Type dataType = paramDef.Value.GetType(); //mark 须从流程上下文取值,目前只是为了方便 PropertyInfo[] propsInfo = dataType.GetProperties(); //mark 用反射属性?还是用xml serialize? foreach (PropertyInfo item in propsInfo) { object propVal = item.GetValue(paramDef.Value, null); if (propVal == null) continue; paraElement.Add(new XElement(item.Name, propVal)); } } operationElement.Add(paraElement); } XElement envelopeElement = XElement.Parse(@"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""><soap:Body></soap:Body></soap:Envelope>"); XElement bodyElement = (XElement)envelopeElement.FirstNode; bodyElement.Add(operationElement); XDeclaration xmlDeclare = new XDeclaration("1.0", "utf-8", ""); XDocument doc = new XDocument(xmlDeclare, envelopeElement); using (StringWriter writer = new StringWriter()) { doc.Save(writer); writer.Flush(); //mark string trashStr = @" xmlns="""""; return writer.ToString().Replace("utf-16", "utf-8").Replace(trashStr, ""); } }
internal static InvokeWebServiceJob CreateImmediateJob(string jobID, string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters) { InvokeWebServiceJob job = new InvokeWebServiceJob(); job.JobID = jobID; job.Category = category; job.Name = name; job.SvcOperationDefs = new WfServiceOperationDefinitionCollection(); WfServiceAddressDefinition address = new WfServiceAddressDefinition(WfServiceRequestMethod.Post, null, url); WfServiceOperationDefinition serviceDef = new WfServiceOperationDefinition(address, methodName, parameters, string.Empty); serviceDef.Timeout = TimeSpan.FromSeconds(24 * 60 * 60); job.SvcOperationDefs.Add(serviceDef); return(job); }
internal static InvokeWebServiceJob CreateImmediateJob(string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters) { return(CreateImmediateJob(UuidHelper.NewUuidString(), name, category, url, methodName, parameters)); }
internal static InvokeWebServiceJob CreateImmediateJob(string name, string category, string url, string methodName, WfServiceOperationParameterCollection parameters) { return CreateImmediateJob(UuidHelper.NewUuidString(), name, category, url, methodName, parameters); }