Problems sending and receiving JSON between ASP.net web service and ASP.Net web client

后端 未结 1 960
别跟我提以往
别跟我提以往 2021-01-25 10:08

You would think with all the posts here that this would be easy to figure out. :| Well here is what should be a simple example. NOTE The web service is VB and the client is c

相关标签:
1条回答
  • 2021-01-25 10:30

    Here is a method that makes calls to a JSON web service, allowing the developer to both send and receive complext data types. The object passed in can be any data type or class. The result is a JSON string, and or any error message the methods type is shown below

    public class WebServiceCallReturn {
        public string JSONResponse { get; set; }
        public string SimpleResponse { get; set; }
        public string Error { get; set; }
    }
    
    public WebServiceCallReturn WebServiceJSONCall(string uri, string requestType, object postData = null) {
        WebServiceCallReturn result = new WebServiceCallReturn();
    
        // create request
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
        webRequest.ContentType = "application/json; charset=utf-8";
        webRequest.Method = requestType;
        webRequest.Accept = "application/json; charset=utf-8";
        // add json data object to send
        if (requestType == "POST") {
            string json = "{ }";
            if (postData != null) {
                try {   // the serializer is fairly robust when used this way
                    DataContractJsonSerializer ser = new DataContractJsonSerializer(postData.GetType());
                    MemoryStream ms = new MemoryStream();
                    ser.WriteObject(ms, postData);
                    json = Encoding.UTF8.GetString(ms.ToArray());
                } catch {
                    result.Error = "Error serializing post";
                }
            }
            webRequest.ContentLength = json.Length;
            StreamWriter sw;
            try {
                sw = new StreamWriter(webRequest.GetRequestStream());
            } catch (Exception ex) {
                // the remote name could not be resolved
                result.Error = ex.Message;
                return result;
            }
            sw.Write(json);
            sw.Close();
        }
    
        // read response
        HttpWebResponse webResponse;
        try {
            webResponse = (HttpWebResponse)webRequest.GetResponse();
        } catch (Exception ex) {
            // The remote server returned an error...
            // (400) Bad Request
            // (403) Access forbidden   (check the application pool)
            // (404) Not Found
            // (405) Method not allowed
            // (415) ...not the expected type
            // (500) Internal Server Error   (problem with IIS or unhandled error in web service)
            result.Error = ex.Message;
            return result;
        }
        Stream responseStream = webResponse.GetResponseStream();
        StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
        string resultString = sr.ReadToEnd();
        sr.Close();
        responseStream.Close();
        result.JSONResponse = resultString;
        return result;
    }
    

    This method could be used as follows

    public SomeCustomDataClass Getsomeinformation(int userID) {
    
        UserInfoClass postData = new UserInfoClass();
        postData.WebUserID = userID;
        SomeCustomDataClass result = new SomeCustomDataClass();
    
        string uri = URL + "SomeServices.svc/GetSomething";
        WebServiceCallReturn webReturn = WebServiceJSONCall(uri, "POST", postData);
        if (webReturn.Error == null) {
            //resultString = CleanJSON(resultString);
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            try {
                result = serializer.Deserialize<SomeCustomDataClass>(webReturn.JSONResponse);
            } catch {
                result.Error = "Error deserializing";
            }
        } else {
            result.Error = webReturn.Error;
        }
        return result;
    }
    

    Hope that helps someone

    0 讨论(0)
提交回复
热议问题