C\#Http Post 방식 으로 JSon 데이터 문자열 을 전달 하여 웹 서 비 스 를 호출 합 니 다.

머리말
얼마 전에 ERP 시스템 을 만 들 었 는데 시스템 기능 이 완선 되면 서 클 라 이언 트(CS 모델)가 점점 비대 해 졌 다.이 제 는 비 즈 니스 논리 층 아래 부분 과 인터페이스 층 을 분리 해 웹 서 비 스 를 이용 하려 고 합 니 다.C\#에서 인용 자 를 직접 추가 하여 웹 서 비 스 를 호출 하 는 방식 이 원활 하지 않 기 때문에 Http 요청 을 수 동 으로 보 내 는 방식 으로 웹 서 비 스 를 호출 합 니 다.마지막 으로 Post 방식 으로 웹 서 비 스 를 호출 하 는 것 을 선택 하여 안전성 과 효율 은 고려 하지 않 습 니 다.사용 을 배 우 는 과정 에서 많은 문제 가 발생 했 고 오 랜 시간 이 걸 려 서 해결 되 었 습 니 다.인터넷 에 관련 된 댓 글 이 매우 적 습 니 다.만약 에 여러분 이 사용 하 는 과정 에서 해결 하기 어 려 운 문제 가 있 으 면 저 를 찾 아 보 세 요. 
전제 조건
Post 방식 으로 웹 서 비 스 를 호출 하려 면 서비스 항목 프로필 Web.config 에 Http 프로 토 콜 을 사용 하 는 설정 을 추가 해 야 합 니 다.탭 에설정 을 추가 하 는 동시에설정 도 추가 할 수 있 습 니 다.이렇게 하면 서비스 방법의 반환 값 에서 서비스 방법 이 호출 한 이상 정 보 를 가 져 올 수 있 고 이상 정 보 는 xml 형식 으로 되 돌아 와 클 라 이언 트 가 디 버 깅 을 할 수 있 습 니 다. 
웹 서비스 인터페이스 방법

[WebMethod]
    public string Project(string paramaters)
    {
      return paramaters;
    }

구현 코드 

public string Post(string methodName, string jsonParas)
    {
      string strURL = Url + "/" + methodName;

      //    HTTP   
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
      //Post     
      request.Method = "POST";
      //    
      request.ContentType = "application/x-www-form-urlencoded";

      //    ,   URL   
      //                   JsonParas(  :[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]),
      //                    ( :"paramaters=[{\"UserID\":\"0206001\",\"UserName\":\"ceshi\"}]"),
      //   paramaters WebService        ,        Json     
      //          Url  
      string paraUrlCoded = System.Web.HttpUtility.UrlEncode("paramaters");
      paraUrlCoded += "=" + System.Web.HttpUtility.UrlEncode(jsonParas);

      byte[] payload;
      // Json         
      payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
      //     ContentLength  
      request.ContentLength = payload.Length;
      //    ,      

      Stream writer;
      try
      {
        writer = request.GetRequestStream();//           Stream  
      }
      catch (Exception)
      {
        writer = null;
        Console.Write("       !");
      }
      //        
      writer.Write(payload, 0, payload.Length);
      writer.Close();//     

      String strValue = "";//strValue http         
      HttpWebResponse response;
      try
      {
        //     
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = ex.Response as HttpWebResponse;
      }

      Stream s = response.GetResponseStream();

      //          XML      ,XML Content        Json  
      XmlTextReader Reader = new XmlTextReader(s);
      Reader.MoveToContent();
      strValue = Reader.ReadInnerXml();//  Content  Json  
      Reader.Close();
      s.Close();

      return strValue;//  Json  
    }
Url 형식 샘플:"http://59.68.29.106:8087/IFT_Project.asmx"
methodName 인 자 는"Project"입 니 다.
JSonParas 는 C\#JavaScriptSerializer 를 사용 하여 List형식의 대상 을 직렬 화 한 후에 얻 은 값 입 니 다.데이터 형식:[{\"UserID\":\"0206001\\",\"Username\":\"ceshi\"}],JSon 데이터 의 중 괄호 는 여러 대상 이 집합 하여 서열 화 되 고 괄호 는 한 대상 이 직렬 화 된 결 과 를 대표 합 니 다.괄호 안의 내용 은 키 가 맞 는 방식 으로 보 여 주 며,여러 속성 간 에는 쉼표 로 구분 되 며,대상 마다 쉼표 로 구분 된다.
request.contentType 은 값 을 설정 해 야 합 니 다."application/x-www-form-urlencoded"를 사용 하 는 것 을 권장 합 니 다.다른 값 을 설정 하면 서버 내부 이상 을 알 리 기 쉽 습 니 다.이러한 방식 으로 서비스 인터페이스 방법 으로 xml 형식의 문자열 을 되 돌려 줍 니 다.
payload 는 요청 인 자 를 바 이 너 리 로 변환 하여 저장 합 니 다.여 기 는 반드시"paramaters"를 추가 해 야 합 니 다.그렇지 않 으 면 이상 하 게 인자 가 부족 합 니 다.paramaters 는 서비스 인터페이스 함수 의 매개 변수 이름 입 니 다.함수 에서 URL 인 코딩 을 사 용 했 습 니 다.인 코딩 을 할 때 키 와 값 만 인 코딩 하고 중간=인 코딩 을 하지 마 십시오.그렇지 않 으 면 getResponse 에서 이상 을 보고 할 수 있 습 니 다.
request.contentLength 도 설정 해 야 할 값 입 니 다.
응답 흐름 을 받 은 후 Stream s=response.GetResponseStream();Reader 를 사용 하여 응답 흐름 을 분석 해 야 합 니 다.이 곳 은 XmlTextReader 를 사용 합 니 다.제 서비스 방법 은 xml 형식의 문자열 을 되 돌려 주 었 기 때 문 입 니 다.그 중에서 Json 데 이 터 는 xml 콘 텐 츠 에 있 습 니 다.제 이 슨 데 이 터 를 추출 한 후 그 에 상응하는 반 서열 화 를 진행 하면 대상 을 얻 을 수 있다. 
작은 매듭
Post 호출 방식 을 배 우 는 과정 에서 댓 글 을 살 펴 보 았 지만 인터넷 에 올 라 온 댓 글 이 적 었 습 니 다.많은 댓 글 에서 Post 방법의 사례 를 제 시 했 습 니 다.많은 post 방법 이 문자열 의 형식 을 명확 하 게 제시 하지 않 아서 제 가 들 어 온 매개 변수 인 jsonParas 는 키 paramaters 가 부족 하고 테스트 를 한 지 오래 되 어서 야 이 오 류 를 발 견 했 습 니 다.결국 포기 할 뻔 했 어.그리고 ContentType 의 설정 도 중요 합 니 다.다른 값 을 사용 하면 들 어 오 는 매개 변수 에 대한 요구 가 높 습 니 다.초보 자 들 은 다른 방식 을 사용 하 는 것 을 권장 하지 않 습 니 다.초기 에 Post 방식 을 사용 할 때 getResponse()에서 이상 을 알 리 기 쉬 우 며 customer Errors mode 를 설정 하여 이상 정 보 를 클 라 이언 트 에 게 되 돌려 주 고 디 버 깅 하기 쉽 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기