Webservice HTTP

由于项目需要:自己写了一个WebserviceDemo,把遇到的问题记下来。

方式一 :使用代理类来访问Webservice,此方式不讲解,感觉复杂(神坑)。

(生成的代理路径 C:UsersadminAppDataLocalTempFrameWork.WebService.DynamicWebServiceCalling.doAction5DD81ED96F54BCFBC7A4634BB01BE5CA.dll)

方式二:HTTP方式调用两个测试工具

 1.POSTMan

2.Fiddler

3.本地测试什么都没有问题,部署到阿里云远程服务器,在本地用上面的调用工具,就提示500错误。

原来web.config里面默认Post设置是不允许远程调用webservice,改变一下配置就可以了。    
如果想在远程可以正常调用,需要修改web.config,在system.web节下面加上下面一段话即可。

<?xml version="1.0" encoding="utf-8"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <system.web>
    <compilation targetFramework="4.0" />
    <webServices >
      <protocols >
        <add name="HttpSoap"/>
        <add name="HttpPost"/>
        <add name="HttpGet"/>
        <add name="Documentation"/>
      </protocols>
    </webServices>
  </system.web>

</configuration>

  

下面是使用HTTP调用webservice的代码

   var url = "http://localhost:9000/WebServiceGSMTest.asmx/GetToken3";
            string data = "Id=11111&name=222";
            var retBack = HttpHelpers.RequestData(url, data, ReqMethod.POST, null, "application/x-www-form-urlencoded");

  

 public class HttpResponse
    {
        public bool Status;

        public string RetStr;

        public Exception Exception;
    }

    public enum ReqMethod
    {
        POST,

        GET,
    }

  

 /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <param name="data"></param>
        /// <param name="method"></param>
        /// <param name="header"></param>
        /// <param name="contentType"></param>
        /// <returns></returns>
        public static HttpResponse RequestData(string url, string data, ReqMethod method, WebHeaderCollection header, string contentType = "application/json")
        {
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            Stream stream1 = null;
            StreamReader sr = null;
            HttpResponse res = new HttpResponse();
            try
            {

                request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = method.ToString();
                if (header != null)
                {
                    request.Headers = header;
                }
                request.ContentType = contentType;
                if (method == ReqMethod.POST)
                {
                    byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
                    request.ContentLength = postdatabyte.Length;
                    request.KeepAlive = true;
                    Stream stream;
                    stream = request.GetRequestStream();
                    stream.Write(postdatabyte, 0, postdatabyte.Length); //设置请求主体的内容
                    stream.Close();
                }
                //接收响应
                response = (HttpWebResponse)request.GetResponse();
                stream1 = response.GetResponseStream();
                sr = new StreamReader(stream1);
                string str = sr.ReadToEnd();
                res.Status = true;
                res.RetStr = str;
            }
            catch (Exception ex)
            {
                res.Exception = ex;
            }
            finally
            {
                if (stream1 != null)
                {
                    stream1.Close();
                    stream1.Dispose();
                }
                if (sr != null)
                {
                    sr.Close();
                    sr.Dispose();
                }
            }
            return res;

        }

  

原文地址:https://www.cnblogs.com/ligl/p/7805096.html