The following example shows how to use C# to call the Channel API. This example imports a project. Please post a comment if you have feedback or questions.
using System; using System.IO; using System.Net; using System.Text; namespace Iguana.Api { class Program { static void Main(string[] args) { string projectZipFilePath = @"C:\path\to\exported\project.zip"; string translatorGuid = "translator_guid"; new ChannelAdapter().ImportProject(projectZipFilePath, translatorGuid); } } public class ChannelAdapter { private readonly string _iguanaServerUrl = "http://localhost:6543/"; // Import a translator project into the sample channel. public void ImportProject(string projectZipFilePath, string projectGuid) { var projectStream = ConvertFileToBase64(projectZipFilePath); // There are better utilites to do this in a proper web app (not a console app) string uriEncodedProjectStream = Uri.EscapeDataString(projectStream); var channelUri = new Uri(string.Format("{0}import_project", _iguanaServerUrl)); var parameters = string.Format("project={0}&guid={1}", uriEncodedProjectStream, projectGuid); PerformPostAction(channelUri, Encoding.UTF8.GetBytes(parameters)); } private string PerformPostAction(Uri serverUri, byte[] requestMessageBytes, string contentType = "application/x-www-form-urlencoded") { if (serverUri == null) throw new ArgumentNullException("serverUri", "The URI cannot be null."); var iguanaServerRequest = WebRequest.Create(serverUri); var returnValue = string.Empty; try { iguanaServerRequest.Credentials = new NetworkCredential("admin", "password"); iguanaServerRequest.Method = WebRequestMethods.Http.Post; iguanaServerRequest.ContentType = contentType; iguanaServerRequest.ContentLength = requestMessageBytes.Length; using (var httpRequest = iguanaServerRequest.GetRequestStream()) { httpRequest.Write(requestMessageBytes, 0, requestMessageBytes.Length); httpRequest.Close(); } using (var httpWebResponse = iguanaServerRequest.GetResponse() as HttpWebResponse) { if (httpWebResponse == null) throw new Exception(string.Format("No response was found at this address: {0}", iguanaServerRequest.RequestUri)); Console.WriteLine("Received response from [{0}]\t::\t[{1}]", iguanaServerRequest.RequestUri.AbsolutePath, httpWebResponse.StatusDescription); using (var responseStream = new StreamReader(httpWebResponse.GetResponseStream())) { returnValue = responseStream.ReadToEnd(); // if (PrintWebResponse) Console.WriteLine(returnValue); // proper logging can be added here... // Just doing this here because we are in a console app and don't have the PrintWebResponse object if (true) Console.WriteLine(returnValue); } } } catch (WebException webException) { Console.WriteLine("Received response from [{0}]\t::\t[{1}]", iguanaServerRequest.RequestUri.AbsolutePath, webException.Status); Console.ReadKey(); } return returnValue; } // Get the translator project zip file contents as base64 encoded stream... private static string ConvertFileToBase64(string zipFilePath) { if (!File.Exists(zipFilePath)) throw new Exception(string.Format("A valid file path must be provided. The current value is: {0}", zipFilePath)); byte[] binaryData = File.ReadAllBytes(zipFilePath); string outstr = System.Convert.ToBase64String(binaryData, 0, binaryData.Length); return outstr; } } }