>

C # 응용 프로그램 내에서 EORI 유효성 검사 개방형 인터페이스를 호출하려고하지만 아무데도 얻지 못합니다. 나는 사이트를 둘러 보았고 이것을 수행하는 방법에 대한 문서가없는 것 같습니다.

사이트 : http : //ec.europa .eu/taxation_customs/dds2/eos/news/newstar.jsp? Lang = en

WSDL : http://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation? wsdl

새 C # 콘솔 앱을 만들고 서비스 참조로 WSDL을 추가 한 다음 서비스 호출을 시도했지만 다음 예외가 발생했습니다 ...

System.ServiceModel.CommunicationException: 'The server did not provide a meaningful reply; this might be caused by a contract mismatch, a premature session shutdown or an internal server error.'

온라인 도구를 숫자와 함께 사용했으며 예상대로 데이터를 반환합니다. http://ec.europa.eu/taxation_customs/dds2/ eos/eori_validation.jsp? Lang = en

다른 사람이 이것으로 운이 있었습니까?

감사합니다


  • 답변 # 1

    EORI 유효성 검사 방법의 정의를 열면 열리는 Reference.cs 파일에 깊은 URI를 Google에 게시하면이 페이지의 누군가 https://www.codeproject.com/ Questions/1075553/Soap-Message-Format-Issue-while-accessing-webservi에 동일한 문제가 있습니다.

    그 페이지에서 그는 자신이 쿼리를 만드는 데 사용하는이 샘플 코드를 인용합니다.

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soap:Body> 
    <ev:validateEORI xmlns:ev="http://eori.ws.eos.dds.s/"> 
    <ev:eori>DE123456</ev:eori> 
    <ev:eori>IT123456789</ev:eori> 
    </ev:validateEORI> 
    </soap:Body> 
    </soap:Envelope>
    
    

    Postman에서이 코드를 사용해보고 결과를 즐기십시오. : D

    그의 쿼리는 궁극적으로 그가 작성한 C # 코드가 유효한 XML을 생성하지 않지만 최소한이 XML을 통해 테스트/개발 프로세스를위한 API 결과를 얻을 수 있습니다.

  • 답변 # 2

    감사합니다 도움을 받으려면 다른 사람이 어려움을 겪고있는 경우 요청을 보내고 보내는 도우미 클래스는 다음과 같습니다.

    public class EoriModel
        {
            string _url;
            public EoriModel()
            {
                _url = "http://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation";  
            }
            public EoriResponseModel ValidateEoriNumber(string number)
            {
                if (number == null)
                {
                    return null;
                }
                XmlDocument soapEnvelopeXml = CreateSoapEnvelope(number);
                HttpWebRequest webRequest = CreateWebRequest(_url);
                InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);
                IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);
                asyncResult.AsyncWaitHandle.WaitOne();
                string response;
                using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
                {
                    using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
                    {
                        response = rd.ReadToEnd();
                    }
                }
                int startPos = response.IndexOf("<return>");
                int lastPos = response.LastIndexOf("</return>") - startPos + 9;
                string responseFormatted = response.Substring(startPos, lastPos);
                XmlSerializer serializer = new XmlSerializer(typeof(EoriResponseModel));
                EoriResponseModel result; 
                using (TextReader reader = new StringReader(responseFormatted))
                {
                    result = (EoriResponseModel)serializer.Deserialize(reader);
                }
                return result;
            }
            private static HttpWebRequest CreateWebRequest(string url)
            {
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
                webRequest.ContentType = "text/xml;charset=\"utf-8\"";
                webRequest.Accept = "text/xml";
                webRequest.Method = "POST";
                return webRequest;
            }
            private static XmlDocument CreateSoapEnvelope(string number)
            {
                XmlDocument soapEnvelopeDocument = new XmlDocument();
                StringBuilder xmlBuilder = new StringBuilder();
                xmlBuilder.AppendFormat("<soap:Envelope xmlns:soap={0} >", "'http://schemas.xmlsoap.org/soap/envelope/'");
                xmlBuilder.Append("<soap:Body>");
                xmlBuilder.AppendFormat("<ev:validateEORI xmlns:ev={0} >", "'http://eori.ws.eos.dds.s/'");
                xmlBuilder.AppendFormat("<ev:eori>{0}</ev:eori>", number);
                xmlBuilder.Append("</ev:validateEORI>");
                xmlBuilder.Append("</soap:Body> ");
                xmlBuilder.Append("</soap:Envelope> ");
                soapEnvelopeDocument.LoadXml(xmlBuilder.ToString());
                return soapEnvelopeDocument;
            }
            private static void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
            {
                using (Stream stream = webRequest.GetRequestStream())
                {
                    soapEnvelopeXml.Save(stream);
                }
            }
        }
    
    

    결과를 ​​파싱하는 데 사용되는 주석이있는 클래스

    [XmlRoot(ElementName = "return")]
        public class EoriResponseModel
        {
            [XmlElement(ElementName = "requestDate")]
            public string RequestDate { get; set; }
            [XmlElement(ElementName = "result")]
            public List<Result> Result { get; set; }
        }
        [XmlRoot(ElementName = "result")]
        public class Result
        {
            [XmlElement(ElementName = "eori")]
            public string Eori { get; set; }
            [XmlElement(ElementName = "status")]
            public string Status { get; set; }
            [XmlElement(ElementName = "statusDescr")]
            public string StatusDescr { get; set; }
            [XmlElement(ElementName = "name")]
            public string Name { get; set; }
            [XmlElement(ElementName = "street")]
            public string Street { get; set; }
            [XmlElement(ElementName = "postalCode")]
            public string PostalCode { get; set; }
            [XmlElement(ElementName = "city")]
            public string City { get; set; }
            [XmlElement(ElementName = "country")]
            public string Country { get; set; }
        }
    
    

  • 이전 python - Flask에서 PHP 파일로 리디렉션
  • 다음 winforms - Windows API 기능을 사용하여 ID로 NET 프로그램에 포함 된 리소스에 액세스