/// <summary> /// Initializes a new instance of <see cref="CritSendConnect"/> /// </summary> /// <param name="fast">If set to <c>true</c> use the fast web service.</param> /// <param name="user">The Critsent user to use instead of the configuration file.</param> /// <param name="key">The password to use instead of the configuration file.</param> public CritSendConnect(bool fast, string user, string key) { _fast = fast; _configuration = ConnectorConfiguration.Instance; _user = user ?? _configuration.User; _key = key ?? _configuration.Key; // This line avoids the HTTP 417 errors. // Found at http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5023d48b-476a-47db-b108-1a4eca6a5316 System.Net.ServicePointManager.Expect100Continue = false; WSDL01forMxMaster client = CreateClient(!_fast ? _configuration.Hosts : _configuration.FastHosts) ?? GetFallbackHost(_configuration.Hosts); _client = client; }
/// <summary> /// Creates a web service client instance. /// </summary> /// <param name="host"></param> /// <returns></returns> private WSDL01forMxMaster CreateClient(string host) { WSDL01forMxMaster client; try { client = new WSDL01forMxMaster { EnableDecompression = true, Url = host + Wsdl }; // If the url does not work an exception is thrown. var auth = GetAuthentication(); client.isTag(auth, "test"); } catch (Exception) { return(null); } return(client); }
/// <summary> /// Gets a working host from the passed array of urls. /// </summary> /// <param name="hosts">Array containing the hosts to test.</param> /// <returns></returns> private WSDL01forMxMaster GetFallbackHost(IList <string> hosts) { WSDL01forMxMaster client = null; string host = null; //We try all the hosts. while (client == null) { host = hosts[_random.Next(hosts.Count)]; client = CreateClient(host); } _host = host; //If we did not find anything suitable if (client == null) { throw new CritSendException("MxmConnect has no more available host."); } return(client); }