// eg:url="http://localhost/RESTWSDemo/ACEDemo.svc/OORAS/Retrieve?id=3";

1
private bool invokeByREST(string url) 2 { 3 string data = ""; 4 Dictionary<string, string> parameters = url.GetParameters(); 5 string address = url.GetMainUrl(); 6 string parameterJson = ""; 7 foreach (string key in parameters.Keys) 8 { 9 parameterJson += string.Format("\"{0}\":\"{1}\"", key, parameters[key]); 10 parameterJson += ","; 11 } 12 if (parameterJson.Length > 0) 13 { 14 parameterJson = parameterJson.Remove(parameterJson.Length - 1); 15 data = "{" + parameterJson + "}"; 16 } 17 HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 18 request.Method = "POST"; 19 request.ContentType = "application/json"; 20 byte[] byteData = UTF8Encoding.UTF8.GetBytes(data); 21 request.ContentLength = byteData.Length; 22 23 using (Stream webStream = request.GetRequestStream()) 24 { 25 webStream.Write(byteData, 0, byteData.Length); 26 } 27 try 28 { 29 WebResponse webResponse = request.GetResponse(); 30 using (Stream webStream = webResponse.GetResponseStream()) 31 { 32 if (webStream != null) 33 { 34 using (StreamReader responseReader = new StreamReader(webStream)) 35 { 36 string response = responseReader.ReadToEnd(); 37 } 38 } 39 } 40 } 41 catch (Exception ex) 42 { 43 ACECallback.log.ErrorFormat("Error occured in Invoke by REST:{0}", ex.Message); 44 return false; 45 } 46 return true; 47 }

服务器端:

[OperationContract]
        [FaultContract(typeof(GeneralFaultException))]
        [WebInvoke(UriTemplate = "OORAS/Retrieve",
                   Method = "POST",
                   RequestFormat = WebMessageFormat.Xml,
                   ResponseFormat = WebMessageFormat.Xml)]
        OORASRetrieveResponseData RetrieveOORAS(RetrieveByIdRequestData ooRASRetrieveRequest);

  RequestFormat 无论是XML还是JSON,Client调用的时候都可以用JSON。

 

另外附上WEBSERVICEPROXY,

 private bool invokeBySoap(string url)
        {
            string address = url.Substring(0, url.IndexOf(".asmx") + 5);
            string method = url.GetMainUrl().Substring(url.IndexOf(".asmx") + 6);
            Dictionary<string, string> parameters = url.GetParameters();
            List<string> ps = new List<string>();
            foreach (string key in parameters.Keys)
            {
                ps.Add(parameters[key]);
            }
            WebServiceProxy proxy = new WebServiceProxy(address + "?wsdl", method);
            try
            {
                proxy.ExecuteQuery(method, ps.ToArray());
            }
            catch (Exception ex)
            {
                ACECallback.log.ErrorFormat("Error occured in Invoke By SOAP:{0}", ex.Message);
                return false;
            }
            return true;
        }
View Code

相关文章: