Line 1: using System;
Line 2: using System.Collections.Generic;
Line 3: using System.IdentityModel.Tokens;
Line 4: using System.Linq;
Line 5: using System.Security.Cryptography;
Line 6: using System.ServiceModel;
Line 7: using System.ServiceModel.Channels;
Line 8: using System.ServiceModel.Description;
Line 9: using System.ServiceModel.Security;
Line 10: using System.Text;
Line 11: using System.Web;
Line 12: using RealTime;
Line 13:
Line 14: /// <summary>
Line 15: /// Summary description for Comdata
Line 16: /// </summary>
Line 17: public class Comdata
Line 18: {
Line 19: private const string NT_Username = "extcj302-prod";
Line 20: private const string NT_Password = "November1111";
Line 21: private const string Comdata_AccountCode = "CJ302";
Line 22: private const string Comdata_Password = "CJ302#31";
Line 23: private const string Comdata_CustomerId = "38970";
Line 24: private const string Comdata_SecurityInfo = "COMDATAWEB";
Line 25: private const string ServiceURL = "https://w6.iconnectdata.com/cows/services/RealTimeOnline";
Line 26:
Line 27: public Comdata()
Line 28: {
Line 29: //
Line 30: // TODO: Add constructor logic here
Line 31: //
Line 32: }
Line 33:
Line 34:
Line 35: public class CustomCredentials : ClientCredentials
Line 36: {
Line 37: public CustomCredentials()
Line 38: { }
Line 39: protected CustomCredentials(CustomCredentials cc)
Line 40: : base(cc)
Line 41: { }
Line 42: public override System.IdentityModel.Selectors.SecurityTokenManager
Line 43: CreateSecurityTokenManager()
Line 44: {
Line 45: return new CustomSecurityTokenManager(this);
Line 46: }
Line 47: protected override ClientCredentials CloneCore()
Line 48: {
Line 49: return new CustomCredentials(this);
Line 50: }
Line 51: }
Line 52: public class CustomSecurityTokenManager : ClientCredentialsSecurityTokenManager
Line 53: {
Line 54: public CustomSecurityTokenManager(CustomCredentials cred)
Line 55: : base(cred)
Line 56: { }
Line 57: public override System.IdentityModel.Selectors.SecurityTokenSerializer
Line 58: CreateSecurityTokenSerializer(System.IdentityModel.Selectors.SecurityTokenVersion version)
Line 59: {
Line 60: return new
Line 61: CustomTokenSerializer(System.ServiceModel.Security.SecurityVersion.WSSecurity11);
Line 62: }
Line 63: }
Line 64: public class CustomTokenSerializer : WSSecurityTokenSerializer
Line 65: {
Line 66: public CustomTokenSerializer(SecurityVersion sv)
Line 67: : base(sv)
Line 68: { }
Line 69: protected override void WriteTokenCore(System.Xml.XmlWriter writer,
Line 70: System.IdentityModel.Tokens.SecurityToken token)
Line 71: {
Line 72: var userToken = token as UserNameSecurityToken;
Line 73: var tokennamespace = "o";
Line 74: var created = DateTime.Now;
Line 75: var createdStr = created.ToString("yyyy-MM-ddThh:mm:ss.fffZ");
Line 76: var phrase = Guid.NewGuid().ToString();
Line 77: var nonce = GetSHA1String(phrase);
Line 78: var password = userToken.Password;
Line 79: writer.WriteRaw(string.Format(
Line 80: "<{0}:UsernameToken u:Id=\"" + token.Id + "\" xmlns:u=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-tokenprofile-1.0#UsernameToken\">" +
Line 81: "<{0}:Username>" + userToken.UserName + "</{0}:Username>" + "<{0}:Password Type=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-usernametoken-profile-1.0#PasswordText\">" +
Line 82: password + "</{0}:Password>" + "<{0}:Nonce EncodingType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soapmessage-security-1.0#Base64Binary\">" + nonce + "</{0}:Nonce>" +
Line 83: "<u:Created>" + createdStr + "</u:Created></{0}:UsernameToken>", tokennamespace));
Line 84: }
Line 85: protected string GetSHA1String(string phrase)
Line 86: {
Line 87: var sha1Hasher = new SHA1CryptoServiceProvider();
Line 88: var hashedDataBytes = sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(phrase));
Line 89: return Convert.ToBase64String(hashedDataBytes);
Line 90: }
Line 91: }
Line 92: public static RealTime.RealTimeOnlineClient CreateRealTimeOnlineProxy()
Line 93: {
Line 94: var binding = new CustomBinding();
Line 95: var security = TransportSecurityBindingElement.CreateUserNameOverTransportBindingElement();
Line 96: security.IncludeTimestamp = false;
Line 97: security.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic256;
Line 98: security.MessageSecurityVersion =
Line 99: MessageSecurityVersion.WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10;
Line 100: var encoding = new TextMessageEncodingBindingElement();
Line 101: encoding.MessageVersion = MessageVersion.Soap11;
Line 102: var transport = new HttpsTransportBindingElement();
Line 103: transport.MaxReceivedMessageSize = 20000000;
Line 104: binding.Elements.Add(security);
Line 105: binding.Elements.Add(encoding);
Line 106: binding.Elements.Add(transport);
Line 107: var client = new RealTime.RealTimeOnlineClient(binding,
Line 108: new EndpointAddress(ServiceURL));
Line 109: client.ChannelFactory.Endpoint.Behaviors.Remove<System.ServiceModel.Description.ClientCredentials>();
Line 110: client.ChannelFactory.Endpoint.Behaviors.Add(new CustomCredentials());
Line 111: client.ClientCredentials.UserName.UserName = NT_Username;
Line 112: client.ClientCredentials.UserName.Password = NT_Password;
Line 113: return client;
Line 114: }
Line 115: public static string ComDataExpressCheckRetrieval(double amountToCharge, string driverId, string loadNumber)
Line 116: {
Line 117: var inquiry = new ExpressCheckRetrievalRequest
Line 118: {
Line 119: accountCode = Comdata_AccountCode,
Line 120: password = Comdata_Password,
Line 121: amount = amountToCharge,
Line 122: plusLessFlag = "1",
Line 123: signOnName = "CJ302",
Line 124: driverNumber = driverId,
Line 125: customerId = Comdata_CustomerId,
Line 126: tripNumber = loadNumber,
Line 127: securityInfo = Comdata_SecurityInfo,
Line 128: trackingNumber = DateTime.Now.Ticks
Line 129: };
Line 130:
Line 131: RealTimeOnlineClient client = CreateRealTimeOnlineProxy();
Line 132: try
Line 133: {
Line 134: var response = client.expressCheckRetrieval(inquiry);
Line 135: var strResponse = response.expressCheckNumber;
Line 136: return strResponse;
Line 137: }
Line 138: catch (Exception ex)
Line 139: {
Line 140: return ex.Message;
Line 141: }
Line 142:
Line 143: }
Line 144: }
|