public ActionResult Index() { OpcSessionModel sessionModel = new OpcSessionModel(); sessionModel.supervisorList = GetSupervisors(); return(View("Index", sessionModel)); }
public ActionResult Disconnect() { try { OpcSessionHelper.Instance.Disconnect(HttpContext.Session.Id); HttpContext.Session.SetString("EndpointUrl", string.Empty); } catch (Exception ex) { Trace.TraceError(ex.Message); } if (_application.Server != null) { _application.Stop(); } UpdateStatus("Disconnected"); OpcSessionModel sessionModel = new OpcSessionModel { SessionId = HttpContext.Session.Id, NodesetIDs = new SelectList(new List <string>()) }; return(View("Index", sessionModel)); }
public async Task <ActionResult> CloudLibrayFileOpen(string nodesetfile) { OpcSessionModel sessionModel = new OpcSessionModel { ServerIP = "localhost", ServerPort = "4840", }; string address = _client.BaseAddress + "infomodel/download/" + Uri.EscapeDataString(_namesInCloudLibrary[nodesetfile]); HttpResponseMessage response = _client.Send(new HttpRequestMessage(HttpMethod.Get, address)); AddressSpace addressSpace = JsonConvert.DeserializeObject <AddressSpace>(await response.Content.ReadAsStringAsync().ConfigureAwait(false)); // store the file on the webserver string filePath = Path.Combine(Directory.GetCurrentDirectory(), "NodeSets", "nodeset2.xml"); System.IO.File.WriteAllText(filePath, addressSpace.Nodeset.NodesetXml); _nodeSetFilenames.Add(filePath); string error = ValidateNamespacesAndModels(true); if (!string.IsNullOrEmpty(error)) { sessionModel.ErrorMessage = error; return(View("Error", sessionModel)); } await StartClientAndServer(sessionModel).ConfigureAwait(false); return(View("Browse", sessionModel)); }
public ActionResult Disconnect(FormCollection form, string backUrl) { try { OpcSessionHelper.Instance.Disconnect(Session.SessionID); Session["EndpointUrl"] = ""; } catch (Exception exception) { // Trace an error and return to the connect view. var errorMessage = string.Format(Strings.BrowserDisconnectException, exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); Trace.TraceError(errorMessage); } if (OpcSessionHelper.Instance.InitResult != "Good") { return(RedirectToAction("Index", "Dashboard")); } else { if ((backUrl != null) && (backUrl.Contains("AddOpcServer"))) { return(RedirectToAction("Index", "AddOpcServer")); } else { OpcSessionModel sessionModel = new OpcSessionModel(); sessionModel.PrepopulatedEndpoints = new SelectList(_prepopulatedEndpoints, "Value", "Text"); return(View("Index", sessionModel)); } } }
public ActionResult Start(string supervisorId) { OpcSessionModel sessionModel = new OpcSessionModel(); Session["supervisorId"] = supervisorId; return(Index()); }
public async Task <ActionResult> Activate(string endpointId) { OpcSessionModel sessionModel = new OpcSessionModel { EndpointId = endpointId }; try { await RegistryService.ActivateEndpointAsync(endpointId); } catch (Exception exception) { // Generate an error to be shown in the error view and trace . string errorMessageTrace = string.Format(Strings.BrowserConnectException, exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); Trace.TraceError(errorMessageTrace); if (exception.Message.Contains("ResourceNotFound")) { sessionModel.ErrorHeader = Strings.BrowserEndpointErrorHeader; } else { sessionModel.ErrorHeader = Strings.BrowserConnectErrorHeader; } return(Json(sessionModel)); } Session["EndpointId"] = endpointId; return(Json(sessionModel)); }
public async Task <ActionResult> ConnectWithTrust(string endpointURL) { OpcSessionModel sessionModel = new OpcSessionModel { EndpointUrl = endpointURL }; // Check that there is a session already in our cache data OpcSessionCacheData entry; if (OpcSessionHelper.Instance.OpcSessionCache.TryGetValue(Session.SessionID, out entry)) { if (string.Equals(entry.EndpointURL, endpointURL, StringComparison.InvariantCultureIgnoreCase)) { OpcSessionCacheData newValue = new OpcSessionCacheData { CertThumbprint = entry.CertThumbprint, OPCSession = entry.OPCSession, EndpointURL = entry.EndpointURL, Trusted = true }; OpcSessionHelper.Instance.OpcSessionCache.TryUpdate(Session.SessionID, newValue, entry); return(await Connect(endpointURL)); } } // Generate an error to be shown in the error view. // Since we should only get here when folks are trying to hack the site, // make the error generic so not to reveal too much about the internal workings of the site. Trace.TraceError(Strings.BrowserConnectErrorHeader); sessionModel.ErrorHeader = Strings.BrowserConnectErrorHeader; return(Json(sessionModel)); }
public async Task <ActionResult> Connect(string endpointUrl) { OpcSessionModel sessionModel = new OpcSessionModel { EndpointUrl = endpointUrl }; Session session = null; try { session = await OpcSessionHelper.Instance.GetSessionAsync(Session.SessionID, endpointUrl); } catch (Exception exception) { // Check for untrusted certificate ServiceResultException ex = exception as ServiceResultException; if ((ex != null) && (ex.InnerResult != null) && (ex.InnerResult.StatusCode == StatusCodes.BadCertificateUntrusted)) { sessionModel.ErrorHeader = Strings.UntrustedCertificate; return(Json(sessionModel)); } // Generate an error to be shown in the error view and trace. string errorMessageTrace = string.Format(Strings.BrowserConnectException, exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); Trace.TraceError(errorMessageTrace); sessionModel.ErrorHeader = Strings.BrowserConnectErrorHeader; return(Json(sessionModel)); } Session["EndpointUrl"] = endpointUrl; return(View("Browse", sessionModel)); }
public ActionResult UpdateModel() { OpcSessionModel sessionModel = new OpcSessionModel(); sessionModel.supervisorList = GetSupervisors(); ModelState.Clear(); return(PartialView("_SupervisorList", sessionModel)); }
public async Task <ActionResult> LocalFileOpen(IFormFile[] files, bool autodownloadreferences) { OpcSessionModel sessionModel = new OpcSessionModel { ServerIP = "localhost", ServerPort = "4840", }; try { if ((files == null) || (files.Length == 0)) { throw new ArgumentException("No files specified!"); } _nodeSetFilenames.Clear(); foreach (IFormFile file in files) { if ((file.Length == 0) || (file.ContentType != "text/xml")) { throw new ArgumentException("Invalid file specified!"); } // file name validation new FileInfo(file.FileName); // store the file on the webserver string filePath = Path.Combine(Directory.GetCurrentDirectory(), "NodeSets", file.FileName); using (FileStream stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream).ConfigureAwait(false); } _nodeSetFilenames.Add(filePath); } string error = ValidateNamespacesAndModels(autodownloadreferences); if (!string.IsNullOrEmpty(error)) { sessionModel.ErrorMessage = error; return(View("Error", sessionModel)); } await StartClientAndServer(sessionModel).ConfigureAwait(false); return(View("Browse", sessionModel)); } catch (Exception ex) { Trace.TraceError(ex.Message); sessionModel.ErrorMessage = ex.Message; UpdateStatus($"Error Occured: {sessionModel.ErrorMessage}"); return(View("Error", sessionModel)); } }
public ActionResult Error(string errorMessage) { OpcSessionModel sessionModel = new OpcSessionModel { ErrorHeader = Strings.BrowserOpcErrorHeader, EndpointUrl = (string)Session["EndpointUrl"], ErrorMessage = HttpUtility.HtmlDecode(errorMessage) }; return(Json(sessionModel)); }
public ActionResult BrowseNodes(string endpointId, string endpointUrl, string productUri) { OpcSessionModel sessionModel = new OpcSessionModel { EndpointUrl = endpointUrl, EndpointId = endpointId }; Session["EndpointId"] = endpointId; Session["EndpointUrl"] = endpointUrl; Session["ProductUri"] = productUri; return(View("Browse", sessionModel)); }
public ActionResult Index() { OpcSessionModel sessionModel = new OpcSessionModel(); if (Session["EndpointId"] != null) { return(View("Browse", sessionModel)); } sessionModel.endpointList = CreateEndpointList(); return(View("Index", sessionModel)); }
public ActionResult Error(string errorMessage) { OpcSessionModel sessionModel = new OpcSessionModel { ErrorMessage = HttpUtility.HtmlDecode(errorMessage), NodesetIDs = new SelectList(new List <string>()) }; UpdateStatus($"Error Occured: {sessionModel.ErrorMessage}"); return(View("Error", sessionModel)); }
public ActionResult Login(string instanceUrl, string clientId, string secret) { OpcSessionModel sessionModel = new OpcSessionModel { SessionId = HttpContext.Session.Id, NodesetIDs = new SelectList(new List <string>()) }; _client.DefaultRequestHeaders.Remove("Authorization"); _client.DefaultRequestHeaders.Add("Authorization", "basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(clientId + ":" + secret))); if (!instanceUrl.EndsWith('/')) { instanceUrl += '/'; } _client.BaseAddress = new Uri(instanceUrl); // get namespaces string address = instanceUrl + "infomodel/namespaces"; HttpResponseMessage response = _client.Send(new HttpRequestMessage(HttpMethod.Get, address)); string[] identifiers = JsonConvert.DeserializeObject <string[]>(response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); _namespacesInCloudLibrary.Clear(); foreach (string nodeset in identifiers) { string[] tuple = nodeset.Split(","); _namespacesInCloudLibrary.Add(tuple[0], tuple[1]); } // get names address = instanceUrl + "infomodel/names"; response = _client.Send(new HttpRequestMessage(HttpMethod.Get, address)); string[] names = JsonConvert.DeserializeObject <string[]>(response.Content.ReadAsStringAsync().GetAwaiter().GetResult()); List <string> sortedNames = new List <string>(names); sortedNames.Sort(); _namesInCloudLibrary.Clear(); foreach (string name in sortedNames) { string[] tuple = name.Split(","); _namesInCloudLibrary.Add(tuple[0], tuple[1]); } sessionModel.NodesetIDs = new SelectList(_namesInCloudLibrary.Keys); return(View("Index", sessionModel)); }
public ActionResult Index() { List <Supervisor> supervisorList = new List <Supervisor>(); OpcSessionModel sessionModel = new OpcSessionModel(); Session["EndpointId"] = null; try { IEnumerable <SupervisorApiModel> supervisors = RegistryService.ListSupervisors(); IEnumerable <ApplicationInfoApiModel> applications = RegistryService.ListApplications(); Session["Applications"] = applications; if (supervisors != null) { foreach (var supervisor in supervisors) { Supervisor supervisorInfo = new Supervisor(); supervisorInfo.supervisorModel = supervisor; supervisorInfo.HasApplication = false; foreach (var application in applications) { if (application.SupervisorId == supervisor.Id) { supervisorInfo.HasApplication = true; } } supervisorList.Add(supervisorInfo); } } } catch (Exception e) { Trace.TraceWarning("Can not get supervisors list"); string errorMessage = string.Format(Strings.BrowserOpcException, e.Message, e.InnerException?.Message ?? "--", e?.StackTrace ?? "--"); Trace.TraceWarning(errorMessage); } sessionModel.supervisorList = supervisorList; return(View("Index", sessionModel)); }
private async Task StartClientAndServer(OpcSessionModel sessionModel) { // (re-)start the UA server if (_application.Server != null) { _application.Stop(); } await StartServerAsync().ConfigureAwait(false); // start the UA client Session session = null; string endpointURL = "opc.tcp://" + sessionModel.ServerIP + ":" + sessionModel.ServerPort + "/"; session = await OpcSessionHelper.Instance.GetSessionAsync(_application.ApplicationConfiguration, HttpContext.Session.Id, endpointURL, true).ConfigureAwait(false); UpdateStatus("Connected"); HttpContext.Session.SetString("EndpointUrl", endpointURL); }
public ActionResult Deactivate(string endpointId) { Session["EndpointUrl"] = null; Session["EndpointId"] = null; try { RegistryService.DeActivateEndpoint(endpointId); } catch (Exception exception) { // Generate an error to be shown in trace. string errorMessageTrace = string.Format(Strings.BrowserConnectException, exception.Message, exception.InnerException?.Message ?? "--", exception?.StackTrace ?? "--"); Trace.TraceError(errorMessageTrace); } OpcSessionModel sessionModel = new OpcSessionModel(); return(Json(sessionModel)); }
public async Task <ActionResult> Download() { try { X509Certificate2 certificate = await OpcSessionHelper.Instance.GetApplicationCertificate(); return(File(certificate.GetRawCertData(), MediaTypeNames.Application.Octet, certificate.FriendlyName + ".der")); } catch (Exception ex) { Trace.TraceError(ex.Message); OpcSessionModel sessionModel = new OpcSessionModel { ErrorHeader = Strings.BrowserCertDownloadError, EndpointUrl = string.Empty, ErrorMessage = Strings.BrowserCertDownloadError }; return(View("Error", sessionModel)); } }
public ActionResult Index() { OpcSessionModel sessionModel = new OpcSessionModel(); if (OpcSessionHelper.Instance.InitResult != "Good") { sessionModel.ErrorMessage = OpcSessionHelper.Instance.InitResult; return(View("Error", sessionModel)); } OpcSessionCacheData entry = null; if (OpcSessionHelper.Instance.OpcSessionCache.TryGetValue(Session.SessionID, out entry)) { sessionModel.EndpointUrl = entry.EndpointURL; Session["EndpointUrl"] = entry.EndpointURL; return(View("Browse", sessionModel)); } sessionModel.PrepopulatedEndpoints = new SelectList(_prepopulatedEndpoints, "Value", "Text"); return(View("Index", sessionModel)); }
public ActionResult Index() { OpcSessionModel sessionModel = new OpcSessionModel { SessionId = HttpContext.Session.Id, NodesetIDs = new SelectList(new List <string>()) }; OpcSessionCacheData entry = null; if (OpcSessionHelper.Instance.OpcSessionCache.TryGetValue(HttpContext.Session.Id, out entry)) { sessionModel.ServerIP = entry.EndpointURL.Host; sessionModel.ServerPort = entry.EndpointURL.Port.ToString(); HttpContext.Session.SetString("EndpointUrl", entry.EndpointURL.AbsoluteUri); return(View("Browse", sessionModel)); } UpdateStatus("Additional Information Required"); return(View("Index", sessionModel)); }
public ActionResult GenerateAAS() { try { string packagePath = Path.Combine(Directory.GetCurrentDirectory(), "UANodeSet.aasx"); using (Package package = Package.Open(packagePath, FileMode.Create)) { // add package origin part PackagePart origin = package.CreatePart(new Uri("/aasx/aasx-origin", UriKind.Relative), MediaTypeNames.Text.Plain, CompressionOption.Maximum); using (Stream fileStream = origin.GetStream(FileMode.Create)) { var bytes = Encoding.ASCII.GetBytes("Intentionally empty."); fileStream.Write(bytes, 0, bytes.Length); } package.CreateRelationship(origin.Uri, TargetMode.Internal, "http://www.admin-shell.io/aasx/relationships/aasx-origin"); // create package spec part string packageSpecPath = Path.Combine(Directory.GetCurrentDirectory(), "aasenv-with-no-id.aas.xml"); using (StringReader reader = new StringReader(System.IO.File.ReadAllText(packageSpecPath))) { XmlSerializer aasSerializer = new XmlSerializer(typeof(AasEnv)); AasEnv aasEnv = (AasEnv)aasSerializer.Deserialize(reader); aasEnv.AssetAdministrationShells.AssetAdministrationShell.SubmodelRefs.Clear(); aasEnv.Submodels.Clear(); foreach (string filename in _nodeSetFilenames) { string submodelPath = Path.Combine(Directory.GetCurrentDirectory(), "submodel.aas.xml"); using (StringReader reader2 = new StringReader(System.IO.File.ReadAllText(submodelPath))) { XmlSerializer aasSubModelSerializer = new XmlSerializer(typeof(AASSubModel)); AASSubModel aasSubModel = (AASSubModel)aasSubModelSerializer.Deserialize(reader2); SubmodelRef nodesetReference = new SubmodelRef(); nodesetReference.Keys = new Keys(); nodesetReference.Keys.Key = new Key { IdType = "URI", Local = true, Type = "Submodel", Text = "http://www.opcfoundation.org/type/opcua/" + Path.GetFileName(filename).Replace(".", "").ToLower() }; aasEnv.AssetAdministrationShells.AssetAdministrationShell.SubmodelRefs.Add(nodesetReference); aasSubModel.Identification.Text += Path.GetFileName(filename).Replace(".", "").ToLower(); aasSubModel.SubmodelElements.SubmodelElement.SubmodelElementCollection.Value.SubmodelElement.File.Value = aasSubModel.SubmodelElements.SubmodelElement.SubmodelElementCollection.Value.SubmodelElement.File.Value.Replace("TOBEREPLACED", Path.GetFileName(filename)); aasEnv.Submodels.Add(aasSubModel); } } XmlTextWriter aasWriter = new XmlTextWriter(packageSpecPath, Encoding.UTF8); aasSerializer.Serialize(aasWriter, aasEnv); aasWriter.Close(); } // add package spec part PackagePart spec = package.CreatePart(new Uri("/aasx/aasenv-with-no-id/aasenv-with-no-id.aas.xml", UriKind.Relative), MediaTypeNames.Text.Xml); using (FileStream fileStream = new FileStream(packageSpecPath, FileMode.Open, FileAccess.Read)) { CopyStream(fileStream, spec.GetStream()); } origin.CreateRelationship(spec.Uri, TargetMode.Internal, "http://www.admin-shell.io/aasx/relationships/aas-spec"); // add nodeset files for (int i = 0; i < _nodeSetFilenames.Count; i++) { PackagePart supplementalDoc = package.CreatePart(new Uri("/aasx/" + Path.GetFileName(_nodeSetFilenames[i]), UriKind.Relative), MediaTypeNames.Text.Xml); string documentPath = Path.Combine(Directory.GetCurrentDirectory(), _nodeSetFilenames[i]); using (FileStream fileStream = new FileStream(documentPath, FileMode.Open, FileAccess.Read)) { CopyStream(fileStream, supplementalDoc.GetStream()); } package.CreateRelationship(supplementalDoc.Uri, TargetMode.Internal, "http://www.admin-shell.io/aasx/relationships/aas-suppl"); } } return(File(new FileStream(Path.Combine(Directory.GetCurrentDirectory(), "UANodeSet.aasx"), FileMode.Open, FileAccess.Read), "APPLICATION/octet-stream", "UANodeSet.aasx")); } catch (Exception ex) { OpcSessionModel sessionModel = new OpcSessionModel { ErrorMessage = HttpUtility.HtmlDecode(ex.Message) }; return(View("Error", sessionModel)); } }