c#delphi가 작성한 SOAP 웹 서비스 호출(1)
3709 단어 c#
인터넷에서 두 가지 방법을 봤는데,
1. Vistual Studio에서 웹refrence를 추가하는 방식으로 wsdl에서 wrapper를 도입했지만 항상 형식 오류를 보고했기 때문에 일부 특정 유형, 예를 들어olevariant가 지원되지 않을 수도 있다고 의심하기 시작했다.그러나 VS의 경고 정보를 자세히 살펴보면 wsdl에서Tremoteable에서 계승된 복잡한 형식을 출력하지 않은 것과 관련이 있음을 알 수 있습니다.Delphi의 wsdl은 인터페이스에서 직접 사용하는 복잡한 원본의 정의만 출력합니다. 다중 계승이 있으면 조상이 직접 사용하지 않으면 출력하지 않습니다.그래서 인터페이스에 몇 개의 사용하지 않는 함수를 추가하여 이런 종류를 모두 사용했다.그런 다음 VS에서 다시 가져옵니다. "서비스 참조 추가..."성취
그러나 호출할 때 실패했습니다. 오류 메시지:
text/html; charset=iso-8859-1 (text/xml; charset=utf-8) 。 , IsContentTypeSupported 。 541 :“
500 Internal Server Error
내 SOAP Service는 Apache에 설치되어 있으며 디버그 매개 변수를 -X -w -f "d:\Program Files(x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf\"로 설정하고 서비스를 닫고 Delphi에서 실행하며 추적을 시작합니다.
내 Delphi XE 버전 15.03953.35171, 추적 발견 Web Broker Soap.pas에서 오류가 발생했습니다:
function THTTPSoapDispatcher.DispatchRequest(Sender: TObject;
Request: TWebRequest; Response: TWebResponse): Boolean;
..............
if IsMultiPart then
begin
BindingTypeIn := btMIME;
MimeStream.ProcessMultiPartForm(ReqStream, XMLStream,
string(Request.ContentType), Nil,
Converter.Attachments, Converter.TempDir);
end else
begin
{ Load the SOAP Envelope directly into the XMLStream }
BindingTypeIn := btSOAP;
XMLStream.CopyFrom(ReqStream, 0);// “Stream read error”
end;
classes로 계속 추적하기pas의 procedure Tstream.ReadBuffer(var Buffer; Count: Longint);함수에서 371바이트를 읽어야 하는데 0바이트까지 읽어야 하기 때문에 이 오류를 보고합니다.왜 그랬을까?
TCPTrace(http://www.pocketsoap.com/tcptrace/)공구C#어떤 것이 전달되었는지 살펴보자.
POST /TMTS/DCSoapServerBrokerIIS_Standalone.dll/soap/ISoapService HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo8jCedmtWQBDtUt1GRtNFUMAAAAAwwzVtxpxcEuCzmB2DZGPYO0IUNfw4PRNv2+9V5Cp2fEACQAA
SOAPAction: "urn:tmSoapInt-ISoapService#Test_Sum"
Host: localhost:8080
Content-Length: 372
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
3
4
VS에서 "웹 참조 추가..."wsdl을 불러옵니다. 불러오는 것도 성공했지만 오류가 발생했습니다. TCPTrace에서 캡처한 정보는 다음과 같습니다.
POST /TMTS/DCSoapServerBrokerIIS_Standalone.dll/soap/ISoapService HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.261)
VsDebuggerCausalityData: uIDPo7B2LBy0PhlHmITzVeouookAAAAAb8BWzvTMh0SX09/DtaGIO38HgmbNMpxDgAxyODAZkEcACQAA
Content-Type: text/xml; charset=utf-8
SOAPAction: "urn:tmSoapInt-ISoapService#Test_Sum"
Host: localhost:8080
Content-Length: 564
Expect: 100-continue
Connection: Keep-Alive
3
4
격식이 도대체 어디에 차이가 있습니까?왜 델피의 웹 서비스는 그것을 받아들이지 않습니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.