2012-02-29 12 views
5

मैं डेल्फी 2010 और इंडी का उपयोग कर वेब सेवा की सबूत-अवधारणा खपत करने का प्रयास कर रहा हूं। इस बिंदु पर मेरे कोड है:एसओएपी ट्रांसमिशन डीबगिंग

procedure TForm1.Log(const sEvent, sMsg: String); 
const sPrior: String = ''; 
begin 
    if sEvent <> sPrior then begin 
    mTraffic.Lines.Append(''); 
    mTraffic.Lines.Append(Format('%s: %s', [sEvent, FormatDateTime('mm/dd/yyyy hh:nn:ss.zzz', Now)])); 
    mTraffic.Lines.Append('--------------------------------------------------------------------------------'); 
    sPrior := sEvent; 
    end; 
    mTraffic.Lines.Append(sMsg); 
    Application.ProcessMessages; 
end; 

function TForm1.BuildRequest: String; 
const MINPERDAY = 1440; 
var slRequest: TStringList; 
    sFileName: String; 
    sID: String; 
    sGUID: String; 
    oDoc: TNativeXML; 
    oNode: TXmlNode; 
    uNow: _SystemTime; 
    dtNow: TDateTime; 
    sNow: String; 
    sNonce: String; 
    oIdmd5: TIdHashMessageDigest5; 
begin 
    sFileName := 'Send.xml'; 
    slRequest := TStringList.Create; 
    oIdmd5 := TIdHashMessageDigest5.Create; 
    oDoc := TNativeXML.Create; 
    try 
    oDoc.LoadFromFile(sFileName); 
    SetAttrib(oDoc, 'inputMessage', 'utc', FormatDateTime('m/d/yyyy hh:mm:ss am/pm', Now)); 
    sGUID := 'urn:uuid' + MyCreateUUID; 
    SetAttrib(oDoc, 'inputMessage', 'messageId', sGUID); 
    SetNode(oDoc, 'wsa:messageId', sGUID); 
    Windows.GetSystemTime(uNow); 
    dtNow := SysUtils.SystemTimeToDateTime(uNow); 
    sNow := FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow); 
    sNonce := oIdmd5.HashStringAsHex(sNow + 'Jack' + 'Test' + 'Salt'); 
    SetNodes(oDoc, 'wsu:Created', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow)); 
    SetNode(oDoc, 'wsu:Expires', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss"Z"', dtNow + 5 /MINPERDAY)); 
    SetNode(oDoc, 'wsse:Nonce', sNonce); 
    SetNode(oDoc, 'ElectronicPostmark', FormatDateTime('yyyy-mm-dd"T"hh:mm:ss.zz-8.00', dtNow)); 
    SetNode(oDoc, 'wsse:Username', '#MyUserName#'); 
    SetNode(oDoc, 'wsse:Password', '#MyPassword#'); 
    oDoc.XmlFormat := xfReadable; 
    Result := oDoc.WriteToString; 
    finally 
    slRequest.Free; 
    oIdmd5.Free; 
    oDoc.Free; 
    end; 

end; 

function TForm1.SSLPost(const url: String; sRequest: String): String; 
var lHTTP: TIdHTTP; 
    lIOHandler: TIdSSLIOHandlerSocketOpenSSL; 
    lIDLogDebug: TIdLogDebug; 
    ss: TStringStream; 
begin 
    lHTTP := TIdHTTP.Create(nil); 
    lIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil); 
    lIDLogDebug := TIdLogDebug.Create(nil); 
    ss := TStringStream.Create; 
    try 
    ss.WriteString(sRequest); 
    ss.Position := 0; 
    lIOHandler.SSLOptions.Method := sslvSSLv3; 
    lIOHandler.OnStatusInfo := IdSSLIOHandlerSocketOpenSSL1StatusInfo; 
    lHTTP.IOHandler := lIOHandler; 
    lIdLogDebug.OnSend := IdLogDebug1Send; 
    lIDLogDebug.OnReceive := IdLogDebug1Receive; 
    lIDLogDebug.Active := True; 
    lHTTP.Intercept := lIdLogDebug; 
    try 
     lHTTP.Request.CustomHeaders.Add('SOAPAction: "http://edd.ca.gov/SendTransmission"'); 
     Result := lHTTP.Post(url, ss); 
    except 
     On e: Exception do begin 
     Result := e.Message + #13#10 + '**No Response**'; 
     end; 
    end; 
    finally 
    lHTTP.Free; 
    lIOHandler.Free; 
    lIdLogDebug.Free; 
    ss.Free; 
    end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var sResponse: String; 
begin 
    sResponse := SSLPost('https://FSETTESTPROD.EDD.CA.GOV', BuildRequest); 
    Log('Response', sResponse); 
end; 

नोट: मैं बस से पहले पोस्ट

lHTTP.Request.CustomHeaders.Add('SOAPAction: "http://edd.ca.gov/SendTransmission"'); 

इस लाइन के बारे में विशेष रूप से अनिश्चित हूँ वेब सेवा प्रलेखन के अनुसार, मैं हो रही किया जाना चाहिए या तो एक ACK1 सफलता या एक स्पष्टीकरण के साथ एक एसीके 1 त्रुटि।

SSL: 02/28/2012 16:33:55.609 
    -------------------------------------------------------------------------------- 
    SSL status: "before/connect initialization" 
    SSL status: "before/connect initialization" 
    SSL status: "SSLv3 write client hello A" 
    SSL status: "SSLv3 read server hello A" 
    SSL status: "SSLv3 read server certificate A" 
    SSL status: "SSLv3 read server done A" 
    SSL status: "SSLv3 write client key exchange A" 
    SSL status: "SSLv3 write change cipher spec A" 
    SSL status: "SSLv3 write finished A" 
    SSL status: "SSLv3 flush data" 
    SSL status: "SSLv3 read finished A" 
    SSL status: "SSL negotiation finished successfully" 
    SSL status: "SSL negotiation finished successfully" 
    Cipher: name = RC4-MD5; description = RC4-MD5     SSLv3 Kx=RSA  Au=RSA Enc=RC4(128) Mac=MD5 
    ; bits = 128; version = TLSv1/SSLv3; 

    Send: 02/28/2012 16:33:55.859 
    -------------------------------------------------------------------------------- 
    POST/HTTP/1.0 
    Content-Length: 3130 
    SOAPAction: "http://edd.ca.gov/SendTransmission" 
    Host: FSETTESTPROD.EDD.CA.GOV 
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
    Accept-Encoding: identity 
    User-Agent: Mozilla/3.0 (compatible; Indy Library) 


    <?xml version="1.0" encoding="utf-8"?> 
    <log> 
     <inputMessage utc="2/28/2012 04:32:28 pm" messageId="urn:uuid{4A995507-9E23-49C3-A17C-19C30693C6C1}"> 
     <processingStep description="Unprocessed message"> 
      <soap:Envelope xmlns:xop="http://www.w3.org/2004/08/xop/include" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <soap:Header> 
       <wsa:Action>http://edd.ca.gov/Sendtransmission</wsa:Action> 
       <wsa:MessageID>urn:uuid{4A995507-9E23-49C3-A17C-19C30693C6C1}</wsa:MessageID> 
       <wsa:ReplyTo> 
       <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address> 
       </wsa:ReplyTo> 
       <wsa:To>http://localhost:3031/EDD.DMRC.FSET.WebServices/FsetService.asmx</wsa:To> 
       <wsse:Security soap:mustUnderstand="1"> 
       <wsu:Timestamp wsu:Id="Timestamp-db31b09e-9283-4ff1-9a57-5b97971328d4"> 
        <wsu:Created>2012-02-29T00:32:28Z</wsu:Created> 
        <wsu:Expires>2012-02-29T00:37:28Z</wsu:Expires> 
       </wsu:Timestamp> 
       <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-0ac2cf06-b8da-46c8-9314-8081144b09d5"> 
        <wsse:Username>#MyUserName#</wsse:Username> 
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">#MyPassword#</wsse:Password> 
        <wsse:Nonce>0D78327F3F671183149EEC5907A6A5F6</wsse:Nonce> 
        <wsu:Created>2012-02-29T00:32:28Z</wsu:Created> 
       </wsse:UsernameToken> 
       </wsse:Security> 
      </soap:Header> 
      <soap:Body> 
       <SendTransmission xmlns="http://edd.ca.gov/"> 
       <SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd"> 
        <transmissionDataList> 
        <Count>1</Count> 
        <transmissionData> 
         <transmissionId>123456789</transmissionId> 
         <ElectronicPostmark>2012-02-29T00:32:28.750-8.00</ElectronicPostmark> 
        </transmissionData> 
        </transmissionDataList> 
       </SendTransmissionRequest> 
       <fileBytes>UEsDBBQAAAAIAAaJUzYwks2W0QYAAD2IAAALAAAAREU2</fileBytes> 
       </SendTransmission> 
      </soap:Body> 
      </soap:Envelope> 
     </processingStep> 
     </inputMessage> 
    </log> 

Receive: 02/28/2012 16:33:56.234 
-------------------------------------------------------------------------------- 
HTTP/1.1 200 OK 
Connection: close 
Date: Wed, 29 Feb 2012 00:33:51 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: ASP.NET 
Content-Length: 195 
Content-Type: text/html 
Set-Cookie: ASPSESSIONIDCQSQQDSS=BPLHDJLCKCLDKBDMLBNJOMHP; path=/ 
Cache-control: private 

<html> 
<head> 
<title>This location has been marked as available</title> 
</head> 
<body> 
<h1>AVAILABLE</h1> 
This IP address has been assigned to EDD FSET User Test web site. 
</body> 
</html> 

Response: 02/28/2012 16:33:56.281 
-------------------------------------------------------------------------------- 
<html> 
<head> 
<title>This location has been marked as available</title> 
</head> 
<body> 
<h1>AVAILABLE</h1> 
This IP address has been assigned to EDD FSET User Test web site. 
</body> 
</html> 

मैं एजेंसी है कि वेब सेवा (कैलिफोर्निया EDD) का कहना है के साथ फोन और ईमेल संपर्क में रहे हैं: यहाँ परिणाम मैं इस बिंदु पर हो रही है है। वे इस तकनीक को अपनाने के लिए जितने संभव हो उतने लोगों को प्राप्त करने के लिए प्रेरित होते हैं और उन्हें संभालने के लिए कागज़ की मात्रा को कम करते हैं, लेकिन उनके पास सिस्टम के गहन ज्ञान में नहीं है क्योंकि यह बाहरी विक्रेता द्वारा बनाया गया था।

मैंने सेवा को बेहतर ढंग से समझने और इंडी लाइब्रेरी के संभावित दुरुपयोग के कारण होने वाली किसी भी त्रुटि को खत्म करने के लिए SOAPUI डाउनलोड किया है। मुझे यकीन नहीं है कि इस उद्देश्य के लिए SOAPUI का उपयोग कैसे करें। निर्देश मेरी स्थिति को संबोधित नहीं करते हैं। यदि मैं कार्यक्रम में डब्लूएसडीएल लोड करता हूं और कार्यों में से किसी एक का परीक्षण करने का प्रयास करता हूं, तो मुझे परिणाम मिलता है कि परीक्षण स्थिति [समाप्त] के साथ समाप्त हुआ और मुझे नहीं पता कि इसका क्या करना है।

मैं अपनी छोटी समस्या पर किसी भी मदद की सराहना करता हूं।

+2

पहला, यह "छोटी समस्या" नहीं है, जो मैं समझता हूं कि आपके पास वास्तव में कोई दस्तावेज नहीं है, डब्लूएसडीएल को डेल्फी में आयात करने का प्रयास करें और वहां से अपना रास्ता काम करें, अगर डेल्फी के डब्लूएसडीएल आयातक इसे आयात करेंगे, तो हम शायद उस के साथ काम करें ... – ComputerSaysNo

+0

@ डोरिन मैं मानता हूं कि यह एक छोटी सी समस्या नहीं है। यह परिप्रेक्ष्य बनाए रखने का प्रयास था। जब मैंने पहली बार इस प्रक्रिया को शुरू किया, तो मैंने अपने क्लाइंट को बनाने के लिए डब्ल्यूएसडीएल आयातक का उपयोग किया। यह इस प्रक्रिया में बहुत जल्दी था। मेरी प्रक्रिया को समझने और डीबग करने की कोशिश करते समय मैं वेब संचार को अच्छी तरह समझ नहीं पाया और इसके हिस्सों को छिपाना नहीं था। जब मैं अन्य उपयोगकर्ताओं को पढ़ता हूं कि डब्लूएसडीएल आयातक को समस्याएं थीं और अपूर्ण नौकरी की थी, तो मैंने इसे एक और बुनियादी दृष्टिकोण के पक्ष में छोड़ दिया, जिसे मैंने सोचा था कि मैं बेहतर अनुसरण कर सकता हूं। डेल्फी डब्लूएसडीएल आयातक के साथ अपने पिछले अनुभव से – jrodenhi

+2

, मैं आपको आश्वस्त कर सकता हूं कि यह आसान नहीं है, लेकिन पहला कदम कुछ कार्यों का परीक्षण करने के लिए एसओएपी यूआई का उपयोग कर रहा है, फिर डेल्फी के डब्ल्यूएसडीएल आयातक और प्रयास का उपयोग करके एसओएपी यूआई से "अनुरोध/प्रतिक्रिया" बचाएं एक ही अनुरोध/प्रतिक्रिया या समान प्राप्त करने के लिए, मुझे लगता है कि हम मदद कर सकते हैं, लेकिन यह आसान नहीं होगा, यह निश्चित रूप से है): – ComputerSaysNo

उत्तर

6

सोपूआई यह देखने के लिए रास्ता है कि चीजों को कैसे काम करना चाहिए। आप जो भेज रहे हैं और प्राप्त कर रहे हैं, उसकी जांच करने के लिए RIO.OnBeforeExecute और AfterExecute ईवेंट का उपयोग करें। उन लोगों की तुलना करें जो सोपू भेजता है और प्राप्त करता है। नामस्थानों में मतभेदों को अनदेखा करें, इससे कोई फर्क नहीं पड़ता। आदर्श रूप से, आप एक्सबॉक्स को एक्सबॉयरएक्सक्यूट ईवेंट से बाहर आने में सक्षम होना चाहिए (स्ट्रीम को टेक्स्ट फ़ाइल या लॉग में सहेजें), सोपयूआई में पेस्ट करें, (सोपूआई में क्लीन-अप/रीफॉर्मेट पर राइट-क्लिक करें) और देखें कि एक्सएमएल समझ में आता है, और देखें कि जब आप इसे सबमिट करते हैं तो क्या होता है।

यदि यह पता चला है कि आपका एक्सएमएल काम करने के करीब है, लेकिन 'ट्वीक' की आवश्यकता है, तो आप XML को ऑनबियरएक्सक्यूट ईवेंट में स्ट्रिंगरिप्लेस आदि के साथ संपादित कर सकते हैं, और एक्सएमएल को 'ठीक करें' ताकि यह काम कर सके।

+1

उत्तर के लिए धन्यवाद, क्रिस। यह अब प्रक्रिया का पालन करने जा रहा है। मुझे अभी भी एक और समस्या है लेकिन मुझे इसके लिए एक और सवाल खोलने की जरूरत है। – jrodenhi

संबंधित मुद्दे