Exemplo n.º 1
0
 CheckPoliciesResult WssServiceClient.CheckPolicies(CheckPoliciesRequest request)
 {
     return(Service(request));
 }
Exemplo n.º 2
0
        /* --- Private methods --- */

        /**
         * The method calls the White Source service.
         */
        private R Service <R>(BaseRequest <R> request)
        {
            try
            {
                HttpWebRequest httpRequest = WebRequest.Create(serviceUrl) as HttpWebRequest;
                httpRequest.Method      = "POST";
                httpRequest.ContentType = "application/x-www-form-urlencoded";
                httpRequest.Accept      = "application/json";

                SetProxy(httpRequest);

                // add post data to request
                StringBuilder postString = new StringBuilder();
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_REQUEST_TYPE, System.Web.HttpUtility.UrlEncode(request.Type.ToString()));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_AGENT, System.Web.HttpUtility.UrlEncode(request.Agent));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_AGENT_VERSION, System.Web.HttpUtility.UrlEncode(request.AgentVersion));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_TOKEN, System.Web.HttpUtility.UrlEncode(request.OrgToken));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_PRODUCT, System.Web.HttpUtility.UrlEncode(request.Product));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_PRODUCT_VERSION, System.Web.HttpUtility.UrlEncode(request.ProductVersion));
                postString.Append("&");
                postString.AppendFormat("{0}={1}", APIConstants.PARAM_TIME_STAMP, System.Web.HttpUtility.UrlEncode(request.TimeStamp.ToString()));

                // Serialize projects to JSON
                switch (request.Type)
                {
                case RequestType.UPDATE:
                    UpdateInventoryRequest updateRequest = (UpdateInventoryRequest)Convert.ChangeType(request, typeof(UpdateInventoryRequest));
                    AppendProjects(updateRequest.Projects, postString);
                    break;

                case RequestType.CHECK_POLICIES:
                    CheckPoliciesRequest checkPoliciesRequest = (CheckPoliciesRequest)Convert.ChangeType(request, typeof(CheckPoliciesRequest));
                    AppendProjects(checkPoliciesRequest.Projects, postString);
                    break;

                default:
                    throw new InvalidOperationException("Unsupported request type.");
                }

                ASCIIEncoding ascii     = new ASCIIEncoding();
                byte[]        postBytes = ascii.GetBytes(postString.ToString());
                httpRequest.ContentLength = postBytes.Length;

                Stream postStream = httpRequest.GetRequestStream();
                postStream.Write(postBytes, 0, postBytes.Length);
                postStream.Close();

                using (HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse)
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                    {
                        throw new Exception(String.Format("Server error (HTTP {0}: {1}).", response.StatusCode, response.StatusDescription));
                    }

                    using (Stream stream = response.GetResponseStream())
                    {
                        StreamReader reader         = new StreamReader(stream, Encoding.UTF8);
                        String       responseString = reader.ReadToEnd();
                        Debug("response: " + responseString);

                        // convert response JSON to ResultEnvelope
                        ResultEnvelope resultEnvelope;
                        MemoryStream   responseMS = new MemoryStream(Encoding.Unicode.GetBytes(responseString));
                        System.Runtime.Serialization.Json.DataContractJsonSerializer responseSerializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(ResultEnvelope));
                        resultEnvelope = responseSerializer.ReadObject(responseMS) as ResultEnvelope;
                        responseMS.Close();

                        String data = resultEnvelope.Data;
                        Debug("Result data is: " + data);

                        // convert data JSON to result according to type
                        R            result;
                        MemoryStream dataMS = new MemoryStream(Encoding.Unicode.GetBytes(data));
                        switch (request.Type)
                        {
                        case RequestType.UPDATE:
                            System.Runtime.Serialization.Json.DataContractJsonSerializer updateSerializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(UpdateInventoryResult));
                            result = (R)Convert.ChangeType(updateSerializer.ReadObject(dataMS) as UpdateInventoryResult, typeof(R));
                            dataMS.Close();
                            break;

                        case RequestType.CHECK_POLICIES:
                            // enable Dictionary support
                            DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
                            settings.UseSimpleDictionaryFormat = true;

                            System.Runtime.Serialization.Json.DataContractJsonSerializer checkPoliciesSerializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(CheckPoliciesResult), settings);
                            result = (R)Convert.ChangeType(checkPoliciesSerializer.ReadObject(dataMS) as CheckPoliciesResult, typeof(R));
                            dataMS.Close();
                            break;

                        default:
                            dataMS.Close();
                            throw new InvalidOperationException("Unsupported request type.");
                        }
                        dataMS.Close();

                        return(result);
                    }
                }
            }
            catch (Exception e)
            {
                Debug(e.Message);
                return(default(R));
            }
        }