Saturday 26 August 2017

Soapui Content Transfer Encoding Binary Options


Saya berada di ujung yang longgar bagaimana menambahkan lampiran dalam permintaan SOAP saya. Kita harus mengkonsumsi layanan web partai gaduh, yang dibangun di java, yang merupakan hal paling rumit yang pernah saya jumpai. Layanan web lain yang telah kita gunakan, yang membutuhkan lampiran, memiliki metode atau properti untuk menambahkan lampiran. Sederhana. Namun, yang ini tidak menyediakan metode seperti itu. Kami telah mendapatkan versi pesan SOAP bersamaan seperti yang kami inginkan dari XML, namun ini adalah bagian MIME dari file yang tidak dapat kami tambahkan. Ini adalah bagian XML yang bisa kita hasilkan dan kirim, namun tidak benar karena kita membutuhkan bagian MIME di sana seperti: Saya telah menjelajahi internet untuk mendapatkan jawaban namun telah tampil kosong. Sepertinya tidak ada banyak dokumentasi seputar penggunaan WSE untuk ini. Saya harus menekankan bahwa WSE adalah persyaratan di sisi server, dan tidak mungkin saya dapat mengubah teknologinya untuk mengatasi masalah ini. Apakah ada cara agar bagian MIME ini dapat ditambahkan EDIT: Saya harus menambahkan bahwa saya bisa mendapatkan dokumen XML yang dikirim melalui SoapUI dengan lampiran, namun sepertinya tidak dapat menemukan jalan di dalam kode kita. Saya telah menambahkan sebuah karunia untuk mencoba dan mendapatkan solusi untuk masalah ini. Jika ada yang punya ide lain tolong beritahu saya EDIT lagi: Saya tahu sudah seminggu sejak saya bisa memeriksa tanggapannya di sini, tapi sementara beberapa memberi ide bagus kemana harus melihat saya masih menggambar kosong. Dokumentasi mengerikan seputar XopDocument dan metode-metodenya adalah sebuah titik pelekatan yang besar, jika ada yang memiliki contoh penggunaan SaveToXopPackage yang bisa mereka berikan karena ini mulai diratakan pada 20 Desember 11 di 11:48 Nah John, bagaimana dengan menghasilkan solusi Daripada pergi sekitar hanya berpura-pura Anda tahu segalanya. Dalam skenario ini, untuk saya, WSE diperlukan. Tanpa itu, permintaan kami akan ditolak. Saya tidak bisa memberi tahu pihak ketiga tentang bagaimana mereka seharusnya melakukan coding, saya bisa mencoba tapi mereka selalu menjadi perusahaan yang paling tidak membantu di dunia ini untuk bekerja. Jadi, sementara WSE tidak boleh digunakan jika Anda membuat perangkat lunak sendiri, ini adalah persyaratan dalam contoh ini. Ndash anothershrubery Jan 5 12 di 10:49 Saya tidak banyak bicara tentang itu kecuali bahwa saya berharap seseorang telah memberi tahu Kaisar bahwa pakaiannya sudah usang. Juga, jika Anda berpura-pura menggunakan WSE bukanlah sebuah pilihan, maka Anda pasti tidak akan tahu bagaimana menyesuaikan WCF untuk melakukan yang Anda butuhkan, hanya dengan menggunakan perangkat lunak yang didukung. Ndash John Saunders Jan 5 12 di 17:53 Saya pikir Anda mungkin memiliki beberapa pilihan: 1) Gunakan MTOM. Ini muncul untuk secara otomatis membungkus pesan keluar di blok MIME. 2) Microsoft benar-benar memberikan dukungan untuk menghasilkan dan membaca XOP dengan mime melalui kelas XopDocument, yang merupakan warisan dari SoapEnvelope. Namun, saya berpikir bahwa pendekatan ini mungkin mengharuskan Anda untuk melakukan pengiriman pesan itu sendiri melalui HttpWebRequest. Blog ini punya contoh bagaimana cara mengimplementasikannya. Kelemahannya adalah bahwa hal ini memerlukan banyak kode dan konfigurasi ekstra agar bisa bekerja dengan baik. Solusi ideal adalah mencegat kode yang melakukan transmisi amplop, namun saya tidak dapat menemukan lokasi yang benar untuk hal ini dalam pipa. Im 90 yakin Im mengerjakan proyek yang sama persis seperti kalian. Permintaan sabun itu agak terlalu familiar :-) Sebagian besar jalan di sana dengan beralih ke WCF dan pada dasarnya mengkodekan dengan tangan objek permintaan (menciptakan kelas yang sesuai dengan format sabun dan kemudian menggunakan atribut xmlelement untuk menghiasnya sehingga Sepertinya permintaan sabun mereka. File itu sendiri dinyatakan sebagai Byte () pada kelas Attachment dan juga dihiasi dengan xmlelement). Heres apa kontrak WCF dan bagian dari model data terlihat seperti. Model data sebenarnya memiliki banyak kelas tambahan (Application Area, Data Area, Job, dll) tapi ini memberi cukup rasa bagaimana strukturnya. Bagian yang penting adalah File sebagai Byte (). Ini dia di Vb. Selanjutnya Anda punya klien WCF Anda, ini hampir sama dengan semua klien WCF. Akhirnya kamu punya app. config. Heres keajaiban karena mengatakan WCF untuk menggunakan Mtom untuk mengirim pesan. Ini akan mengambil Byte () dan strip itu keluar ke bagian MIME terpisah menggantikannya dengan XOP: Sertakan. Perhatikan bahwa untuk saat ini saya hanya mengirimnya melalui localhost sehingga saya bisa melihat permintaan menggunakan tcpTrace. Anda bisa google aplikasi itu tapi pada dasarnya dia menangkap permintaannya sehingga kita bisa melihat tampilannya. Saya mengatur tcpTrace untuk mendengarkan di port 84. Akhirnya, Heres panggilan sebenarnya ke klien WCF untuk membuat permintaan. Dan Heres jejak kita melalui tcpTrace. Its mendapat hak struktur dasar dan berhasil menarik data biner dari xml dan menempatkannya di bagian MIME yang terpisah. Seperti yang saya sebutkan sebelumnya - masih ada beberapa masalah. Ada beberapa tag yang hilang dari Header Sabun. Tapi saya pikir bisa mengetahuinya. Masalah sebenarnya adalah bahwa Content-ID TIDAK dalam format yang dapat diterima mitra kami - mereka mengharapkan sesuatu seperti lt1.a33c2d7e84634122705ebc71e53d95d4c2683d726ba54e14apache. org dan memformatnya sebagai tempuri. org1634618782531246992. Hal ini menyebabkan penangan Web Service mereka mogok karena tidak tahu cara membaca konten yang lolos dari isi pesan di dalam pesan sabun. Jawab Jan 7 12 di 0:23 Hanya melihat suntingan Anda untuk ini sekarang. Yeah itu memang terlihat seperti proyek yang sama Sayangnya solusi Anda tidak akan bekerja dalam kasus kami karena kami dibatasi untuk menggunakan WSE dan bukan WCF. Ketergantungan pada VS 2005. Ini adalah rasa sakit. Tapi ini adalah hasil yang saya cari tapi perlu mencari solusinya di WSE. (Namun, dengan masalah Anda, tidakkah Anda dapat mengatur Content-ID untuk apa pun yang Anda inginkan Ini bekerja di SoapUI, saat Anda menentukan ID konten itu sendiri dan tidak bergantung pada representasi default Alamat email saya, bukan pekerjaan satu, ada di dalam Profil jika Anda ingin berbicara lebih jauh ndash anothershrubery Jan 16 12 at 12:58 Seperti yang Anda katakan, Anda berhasil melakukannya melalui SoapUI, saya akan berpikir Anda bisa meminta SoapUI untuk menghasilkan XML yang dikirimkan sehingga Anda tahu bagaimana tampilannya, lalu Memodifikasi kode Anda untuk meniru itu UPDATE: setelah komentar Anda dan membaca jawaban lainnya secara lebih rinci: solusinya terlihat bagi saya hanya mengirim byte secara langsung, menggunakan HttpWebRequest seperti jawaban ktsioliss. Secara rinci: Buat XML SOAP Anda (contoh yang Anda berikan ), Encode ini ke byte di UTF8 (1) Buat sebuah string dengan mimeboundary awal (bagian di Your Before XML), encode ke byte di UTF8 (2) Buat byte untuk mimeboundary kedua (bagian setelah XML). Jadi buatlah string yang mengandung --MIMEBOUNDARY dll encode to UTF8 byte, dan tambahkan semua byte dari file test. gif Anda (3) Tambahkan semua byte dalam urutan (2), (1) dan (3) dan kirimlah itu melintasi kawat. Shouldnt ini melakukan trik Ok jadi saya mendapatkannya untuk menerima data dari file di ltgwm: Filegt element. Ini tanpa menggunakan XOP, jadi permintaan sekarang terlihat seperti: Bila dilewatkan ke SoapUI ini bekerja dengan sempurna, namun dalam kode itu memang memberi respon, tapi itu melempar kesalahan yang mengatakan Response is not well-formed XML. Dengan pengecualian dalam WSE1608: Tidak ada bagian XOP yang berada di arus untuk konten-id yang ditentukan: ltrootpart36875c60-630c-4e23-9e74-f9a9c7547fc7example. jaxws. sungt Saya akan membuka sebuah pertanyaan baru mengenai hal ini karena secara teknis berbeda isu. Saya terlibat dalam proyek yang sama persis dan saya memiliki masalah yang sama seperti yang dibahas di thread ini Saya menggunakan perangkat tambahan vb 2005 dan WSE 3.0 dan saya mendapatkannya bekerja bahkan ini adalah rasa sakit untuk saat ini. Saat menulis isi file langsung di File Property, attachment akan diterima oleh partner. Dalam kasus saya, ini bekerja untuk hampir semua transaksi kecuali PRA. Di sini, tanggapannya positif dan AttachmentID akan dikirimkan namun lampiran tidak muncul dalam transaksi. Berikut adalah contoh bagian Lampiran: Jika saya menyetel RequireMtom untuk Layanan ke True, Ill mendapatkan error berikut: Das Prfix kann nicht von di starstandards. orgwebservices200510transport innerhalb desselben Startelementtags neu definiert werden. Satu sisi, ia bekerja, di sisi lain, saya tidak yakin apakah itu akan dikirim dengan elemen XOP. Menjawab 17 Jan 12 jam 12:46 Saya berdiskusi dengan para pengembang layanan web tentang meletakkan data secara langsung di elemen ltFilegt dan mereka mengatakan ini tidak sesuai dengan spesifikasi mereka dan mereka memerlukan sebuah ltxop: elemen Includegt. Lihat stackoverflowquestions8805095hellip untuk penjelasan lebih lanjut tentang masalah yang kita hadapi. Jika Anda ingin mendiskusikan lebih jauh di luar sini, silakan lihat profil saya untuk alamat email saya. Ndash anothershrubery 17 Jan 12 jam 12:59 Tentu. Tapi saya tidak bisa menemukan alamat email anda Ndash Daniel Schlieckmann 17 Jan 12 at 15:43 Jika Anda tidak dapat melihatnya di bawah bio, sekarang ada di bagian About Me di profil saya. Ndash anothershrubery 17 Jan 12 jam 15:45 Terima kasih Saya sudah mengirimi Anda email Ndash Daniel Schlieckmann 18 Jan 12 at 15:24 Jawaban Anda 2017 Stack Exchange, Menggunakan SOAP untuk Mengirimkan Data Biner Contoh pesan kami sampai saat ini cukup kecil, namun dengan mudah kita dapat membayangkan ingin menggunakan SOAP untuk mengirim data biner biner yang besar. Misalnya, pertimbangkan daftar pengguna klaim asuransi otomatis151remote agents mungkin menggunakan perangkat lunak SOAP untuk mengajukan klaim baru ke server pusat, dan sebagian data yang terkait dengan klaim mungkin berupa rekaman digital yang merekam kerusakan atau lingkungan sekitar kecelakaan. Karena XML tidak langsung menyandikan data biner 8 bit yang benar saat ini, cara sederhana untuk melakukan hal semacam ini mungkin menggunakan tipe dasar XML Schema base64binary dan menyandikan gambar Anda sebagai teks base64 di dalam XML: Teknik ini berhasil, tapi tidak Sangat efisien dalam hal bandwidth, dan butuh waktu pemrosesan untuk mengkodekan dan memecahkan kode byte ke dan dari base64. Email telah menggunakan standar Multipurpose Internet Mail Extensions (MIME) untuk beberapa waktu sekarang untuk melakukan pekerjaan ini, dan MIME mengizinkan pengkodean biner 8 bit. MIME juga merupakan dasar untuk beberapa pengkodean data yang digunakan di HTTP karena perangkat lunak HTTP biasanya dapat menangani MIME, mungkin akan baik jika ada cara untuk mengintegrasikan protokol SOAP dengan standar ini dan cara pengiriman data biner yang lebih efisien. SOAP with Attachments and DIME Pada akhir 2000, HP dan Microsoft merilis sebuah spesifikasi yang disebut Pesan quotSOAP dengan Attachments. quot Spec ini menggambarkan cara sederhana untuk menggunakan pengkodean multiref di SOAP 1.1 untuk mereferensikan bagian lampiran yang dikodekan MIME. Kami tidak akan membahas banyak hal di sini jika Anda ingin membaca spec, Anda dapat menemukannya di w3.orgTR2000NOTE-SOAP-attachments-20001211. Ide dasar dibalik SOAP dengan Attachments (SwA) adalah Anda menggunakan trik HREF yang sama seperti yang Anda lihat di bagian quotObject Graphs quot untuk memasukkan referensi ke data dalam pesan SOAP, bukan secara langsung mengkodekannya. Namun, dalam kasus SwA, Anda menggunakan content-id (cid) bagian MIME yang berisi data yang Anda minati sebagai referensi dan bukan ID beberapa XML. Jadi, pesan yang dikodekan tadi akan terlihat seperti ini: Teknologi lain yang disebut Direct Internet Message Encapsulation (DIME). Dari Microsoft dan IBM, menggunakan teknik yang sama, kecuali pengkodean on-the-wire lebih kecil dan lebih efisien daripada MIME. DIME diajukan ke IETF pada tahun 2002 namun sejak itu kehilangan dukungan bahkan dari penulis aslinya. SwA dan DIME adalah teknologi hebat, dan mereka menyelesaikan pekerjaan, tapi ada beberapa masalah. Masalah utamanya adalah bahwa SwA dan DIME memperkenalkan struktur data yang secara eksplisit berada di luar ranah model data XML. Dengan kata lain, jika seorang perantara menerima pesan MIME sebelumnya dan ingin memasukkan atau mengenkripsi SOAP tubuh secara digital, diperlukan aturan yang memberitahukan bagaimana konten dalam lampiran MIME terkait dengan amplop SOAP. Aturan-aturan itu tidak resmi diformalkan untuk Swadim. Oleh karena itu, alat dan perangkat lunak yang bekerja dengan model data XML perlu dimodifikasi untuk memahami struktur kemasan Swadim dan memiliki cara untuk mengakses data yang disematkan di lampiran MIME. Berbagai XML dan Web service visionaries mulai membahas isu umum penggabungan konten biner dengan model data XML dengan sungguh-sungguh. Akibatnya, beberapa proposal sekarang berkembang untuk memecahkan masalah ini dengan cara yang lebih bersih secara arsitektural. PASWA, MTOM, dan XOP Pada bulan April 2003, Addendum Infoset kuotasi ke SOAP Dengan dokumen Attachmentsquot (PASWA) telah dirilis oleh beberapa perusahaan termasuk Microsoft, ATampT, dan SAP. PASWA memperkenalkan model logis untuk memasukkan konten biner secara langsung ke infoset SOAP. Secara fisik, pesan yang berurusan dengan PASWA terlihat hampir sama dengan dua contoh sebelumnya (gambar yang dikodekan pertama sebagai basis64 sejajar dengan XML dan kemudian sebagai lampiran MIME) Perbedaannya adalah bagaimana kita memikirkan lampiran. Alih-alih memikirkan gambar yang dikodekan MIME sebagai entitas terpisah yang secara eksplisit disebut dalam amplop SOAP, secara logis kita memikirkannya seolah-olah masih sejalan dengan XML. Dengan kata lain, kemasan MIME adalah sebuah optimasi, dan implementasi perlu memastikan bahwa prosesor yang melihat model data SOAP untuk tujuan enkripsi atau penandatanganan masih melihat data aktual seolah-olah itu berbasis pada 6464. Pada bulan Juli 2003, setelah serangkaian percakapan panjang antara XML Protocol Group dan pendukung PASWA, Message Transmission Optimization Mechanism (MTOM) g lahir, dimiliki oleh grup XMLP. Ini membingkai kembali ide-ide di PASWA menjadi fitur abstrak agar lebih sinkron dengan model perluasan SOAP 1.2, dan kemudian menawarkan implementasi fitur itu melalui HTTP. Mekanisme serialisasi disebut XML-Binary Optimized Packaging (XOP) g itu diperhitungkan dalam spesifikasi terpisah sehingga bisa juga digunakan dalam konteks non-SOAP. Sebagai contoh, kami sedikit memodifikasi klaim asuransi sebelumnya dengan menambahkan XML dengan atribut tipe konten (dari spec XOP) yang memberi tahu kami jenis konten MIME apa yang akan digunakan saat membuat serial infoset ini menggunakan XOP. Inilah versi baru: Versi MTOMXOP dari klaim asuransi yang dimodifikasi kami terlihat seperti ini: Intinya, ini sama dengan kawat sebagai versi SwA, namun menggunakan elemen xop: Includegt dan bukan hanya atribut href. Perbedaan sebenarnya adalah arsitektur, karena kita membayangkan alat dan API akan memanipulasi pesan ini persis seperti jika itu adalah model data XML. MTOM dan XOP sedang dalam proses untuk dibebaskan oleh Kelompok Kerja Protokol XML beberapa waktu di tahun 2004, dan masih harus dilihat seberapa baik mereka akan diterima oleh komunitas pengguna yang lebih luas. Umpan balik awal sangat positif, namun, dan penulis buku ini berada di belakang gagasan model data terpadu untuk konten XML dan biner. SoapClient :: SoapClient Parameters URI dari file WSDL atau NULL jika bekerja dalam mode non-WSDL. Selama pengembangan, cache WSDL dapat dinonaktifkan dengan penggunaan pengaturan soap. wsdlcachettl php. ini jika tidak, perubahan yang dilakukan pada file WSDL tidak akan berpengaruh sampai sabun. wsdlcachettl kadaluarsa. Sebuah array pilihan. Jika bekerja dalam mode WSDL, parameter ini bersifat opsional. Jika bekerja dalam mode non-WSDL, pilihan lokasi dan uri harus disetel, di mana lokasi adalah URL dari server SOAP untuk mengirim permintaan ke, dan uri adalah ruang nama target layanan SOAP. Pilihan gaya dan penggunaan hanya bekerja dalam mode non-WSDL. Dalam mode WSDL, mereka berasal dari file WSDL. Pilihan soapversion harus menjadi salah satu SOAP11 atau SOAP12 untuk memilih SOAP 1.1 atau 1.2. Jika dihilangkan, 1.1 digunakan. Untuk otentikasi HTTP, opsi login dan kata sandi dapat digunakan untuk menyediakan kredensial. Untuk membuat koneksi HTTP melalui proxy server, pilihan proxyhost. Proxyport Proxylogin dan proxypassword juga tersedia. Untuk otentikasi sertifikat klien HTTPS gunakan opsi localcert dan passphrase. Otentikasi mungkin diberikan dalam opsi otentikasi. Metode otentikasi dapat berupa SOAPAUTHENTICATIONBASIC (default) atau SOAPAUTHENTICATIONDIGEST. Pilihan kompresi memungkinkan untuk menggunakan kompresi permintaan SOAP HTTP dan tanggapan. Pilihan pengkodean mendefinisikan pengkodean karakter internal. Pilihan ini tidak mengubah pengkodean permintaan SOAP (selalu utf-8), tapi mengubah string ke dalamnya. Pilihan jejak memungkinkan pelacakan permintaan sehingga kesalahan dapat diganti kembali. Default ini ke FALSE Opsi classmap dapat digunakan untuk memetakan beberapa jenis WSDL ke kelas PHP. Pilihan ini harus berupa array dengan tipe WSDL sebagai kunci dan nama kelas PHP sebagai nilai. Pilihan pengecualian adalah nilai boolean yang menentukan apakah kesalahan sabun membuang pengecualian tipe SoapFault. Opsi connectiontimeout mendefinisikan timeout dalam hitungan detik untuk koneksi ke layanan SOAP. Pilihan ini tidak menentukan batas waktu untuk layanan dengan tanggapan lambat. Untuk membatasi waktu menunggu panggilan untuk menyelesaikan pengaturan defaultsockettimeout tersedia. Pilihan typemap adalah array pemetaan tipe. Jenis pemetaan adalah array dengan typename tombol. Typens (namespace URI), fromxml (callback menerima satu parameter string) dan toxml (callback menerima satu parameter objek). Pilihan cachewsdl adalah salah satu WSDLCACHENONE. WSDLCACHEDISK. WSDLCACHEMEMORY atau WSDLCACHEBOTH. Opsi useragent menentukan string yang akan digunakan pada header User-Agent. Pilihan fitur adalah bitmask dari SOAPSINGLEELEMENTARRAYS. SOAPUSEXSIARRAYTYPE. SOAPWAITONEWAYCALLS. Pilihan keepalive adalah nilai boolean yang menentukan apakah akan mengirim Connection: Keep-Alive header atau Connection: close. Pilihan sslmethod adalah salah satu SOAPSSLMETHODTLS. SOAPSSLMETHODSSLv2. SOAPSSLMETHODSSLv3 atau SOAPSSLMETHODSSLv23. KesalahanExceptions SoapClient :: SoapClient () akan menghasilkan kesalahan EERROR jika lokasi dan opsi uri tidak tersedia dalam mode non-WSDL. Pengecualian SoapFault akan dilemparkan jika URI wsdl tidak dapat dimuat. Klien baru SoapClient (some. wsdl) klien baru SoapClient (some. wsdl. Array (soapversion gt SOAP12)) klien baru SoapClient (beberapa. wsdl. Array (login gt somename, kata sandi gt somepassword)) klien baru SoapClient (some. wsdl. Array (proxyhost gt localhost, proxyport gt 8080)) klien baru SoapClient (some. wsdl. Array (proxyhost gt localhost, proxyport gt 8080, proxylogin gt somename, proxypassword gt somepassword)) klien baru SoapClient (beberapa. wsdl. get (localcert gt Certkey. pem)) client new SoapClient (null. Array (lokasi gt localhostsoap. php, uri gt test-uri)) klien baru SoapClient (null. Array (lokasi gt localhostsoap. php, uri gt test-uri, gaya gt SOAPDOCUMENT, Gunakan SOAPLITERAL SOtLITERAL)) klien baru SoapClient (beberapa. wsdl. Array (kompresi gt SOAPCOMPRESSIONACCEPT SOAPCOMPRESSIONGZIP)) klien baru SoapClient (some. wsdl. Array (encoding gt ISO-8859-1)) kelas MyBook penerbit umum klien penulis baru SoapClient ( Book. wsdl. Array (classmap gt arr Ay (buku gt MyBook))) Catatan Kontribusi Pengguna 56 catatan Butuh waktu lebih lama dari seminggu untuk mengetahui bagaimana menerapkan header WSSE (Web Service Security) dalam bahasa PHP asli SOAP. Tidak ada banyak sumber daya yang tersedia dalam hal ini, jadi berpikir untuk menambahkan ini di sini untuk keuntungan masyarakat. Step1: Buat dua kelas untuk membuat struktur untuk header WSSE kelas ltphp clsWSSEAuth private Username private Password function construct (username password) this - gt Username username this - gt Password password class clsWSSEToken private UsernameToken function construct (innerVal) this - gt UsernameToken innerVal Gt Langkah 2: Buat Variabel Sabun untuk UserName dan Password ltphp username 1111 password 1111 Tanyakan kepada penyedia Anda mana nama pengaman yang mereka gunakan. StrWSSENS schemas. xmlsoap. orgws200207secext objSoapVarUser new SoapVar (nama pengguna XSDSTRING NULL, strWSSENS, NULL, strWSSENS) objSoapVarPass new SoapVar (kata sandi XSDSTRING NULL, strWSSENS, NULL. StrWSSENS) gt Step3: Buat Objek untuk Kelas Auth dan masuk dengan sabun Vt ltphp objWSSEAuth new clsWSSEAuth (objSoapVarUser. ObjSoapVarPass) gt Langkah4: Buat SoapVar dari objek kelas Auth ltphp objSoapVarWSSEAuth SoapVar baru (objWSSEAuth SOAPENCOBJECT NULL. StrWSSENS. UsernameToken. StrWSSENS) gt Langkah5: Buat objek untuk Token Class ltphp objWSSEToken new clsWSSEToken (SoSoapVarWSSEAuth) gt Step6: Buat SoapVar dari objek kelas Token ltphp objSoapVarWSSEToken new SoapVar (objWSSEToken SOAPENCOBJECT NULL. StrWSSENS) UsernameToken. StrWSSENS) gt Step7: Buat SoapVar untuk Security node ltphp objSoapVarHeaderVal new SoapVar (objSoapVarWSSEToken. SOAPENCOBJECT. NULL. Str8) Buatlah objek header dari security soaptree ltphp ObjSoapVarWSSEHeader SoapHeader baru (strWSSENS. Keamanan. ObjSoapVarHeaderVal. benar. Abce) Parameter ketiga di sini membuat parameter mustUnderstand1 Forth menghasilkan actorabce gt Langkah9: Buat objek dari Soap Client ltphp objClient new SoapClient (WSDL. ArrOptions) gt Step10: Tetapkan header untuk objek soapclient ltphp objClient - gt setSoapHeader (array (objSoapVarWSSEHeader)) gt Langkah 11 : Panggilan terakhir ke metode ltphp objResponse objClient - gt soapCall (strMethod. RequestPayloadString) gt Catatan mengenai nilai boolean yang mungkin tampak jelas pada refleksi tapi bisa menjadi beberapa pertanyaan: Melihat contoh permintaan SOAP dengan ltSomeBooleanParamgttrueltSomeBooleanParamgt dapat membawa Anda melewati string Benar atau salah sebagai parameter, yang salah - metode yang benar adalah dengan menggunakan tipe data boolean. Ltphp client new SoapClient (wsdl. Options) method DoSomething params params stdClass baru - gt BeberapaBooleanParam TRUE client - gt method (params) snipet permintaan yang disederhanakan akan menjadi benar, namun tidak untuk alasan yang benar: params - gt SomeBooleanParam true Contoh metode permintaan klien (params) yang disederhanakan akan menjadi ltSomeBooleanParamgttrueltSomeBooleanParamgt ini adalah di mana Anda mungkin bertanya-tanya apa yang terjadi pada params - gt Beberapa contoh perintah sederhana dari perangkat lunak klien (params) yang disederhanakan adalah bahwa Anda perlu melakukan hal ini sebagai gantinya - Gt SomeBooleanParam FALSE client - gt method (params) snipet permintaan yang disederhanakan adalah ltSomeBooleanParamgtfalseltSomeBooleanParamgt gt Berharap membantu jika Anda perlu menggunakan ws-security dengan nonce dan stempel waktu, Anda dapat menggunakan ini: class WsseAuthHeader memperluas fungsi SoapHeader construct (user. Pass ) Dibuat Gmdate (Y-m-dTH: i: sZ) mtrand nonce () base64encode passdigest (pak (H. sha1 (paket (H. nonce). Pak (a) dibuat). Pak (a pass)))) auth new stdClass () auth - gt Username new SoapVar (pengguna XSDSTRING NULL ini - gt wssns. NULL. This - gt wssns) auth - gt Password new SoapVar (lulus XSDSTRING. NULL ini - gt wssns NULL ini - gt wssns) auth - gt Nonce baru SoapVar (passdigest XSDSTRING NULL .. this - gt wssns NULL ini - gt wssns) auth - gt Dibuat SoapVar baru (dibuat XSDSTRING. NULL ini - gt wssns NULL this - gt wsuns) usernametoken new stdClass () usernametoken - gt UsernameToken new SoapVar (auth. SOAPENCOBJECT NULL. This - gt wssns. UsernameToken. This - gt wssns) securitysv new SoapVar (new SoapVar (Usernametoken SOAPENCOBJECT) NULL ini - gt wssns UsernameToken this - gt wssns), SOAPENCOBJECT NULL ini - gt wssns Keamanan ini wtns) Membangun (ini - gt wssns) keamanan dan keamanan sejati) dan dengan SoapClient Anda lakukan: klien ltphp klien baru SoapClient (hostpath) client - gt setSoapHeader (Array (new WsseAuthHeader (pengguna pass))) bekerja untuk saya. Berdasarkan postingan stackoverlfow yang hanya menggunakan username dan password, bukan huruf non dan timestamp. Sepertinya ada masalah dengan menentukan string kosong untuk opsi proxyhost dan proxyport dalam versi PHP terbaru (dari versi yang lebih lambat dari 5.2.9, dan Sama dengan atau lebih awal dari 5.2.11). Menyediakan nilai string kosong untuk proxyhost dan proxyport menyebabkan kesalahan jenis host tidak ditemukan: penyediaan NULL atau FALSE berfungsi dengan baik. Bagi siapa saja yang bermasalah dengan ArrayOfxsdstring dan mendapatkan error yang mirip dengan deserializer Tidak ditentukan untuk string tipe array Coba gunakan param fitur, set ke SOAPUSEXSIARRAYTYPE - ini memastikan deserializer yang benar digunakan. Misalnya, klien ltphp baru SoapClient (beberapa. wsdl. Array (fitur gt SOAPUSEXSIARRAYTYPE)) gt Perhatikan bahwa membuat klien sabun untuk URL yang tidak valid (Anda menguji apa yang terjadi, bila layanan tidak tersedia, benar) biasanya melempar pengecualian yang Bisa ditangkap dengan coba .. katch Namun, jika xdebug aktif Anda akan mendapatkan error fatal, yang jelas tidak bisa tertangkap. Pengecualian SoapFault: Klien sepertinya kita tidak mendapatkan dokumen XML di ltdocumentgt yang telah disebutkan terjadi saat server Anda mengeluarkan sesuatu sebelum ltxml. Gt tag Untuk semua yang bermasalah dengan itu, dan tidak ada akses ke kode server: Inilah cara membuat proxy yang akan membersihkan respons untuk Anda. Kelas sederhana diambil dari catatan oleh James Ellis di halaman doRequest () kelas manual ProxyClient meluas SoapClient Cache yang dilindungiDocument public function construct (wsdl. Options) parent. Membangun (wsdl. Options) SetCacheDocument () mengatur isi dokumen yang sebelumnya di-cache fungsi publik SetCacheDocument (document) this - gt cacheDocument document doRequest () menggantikan SoapClient standar untuk menangani permintaan lokal fungsi publik doRequest () mengembalikan cache ini - gt cache meletakkan ini Kode dalam fungsi Anda atau dimanapun Anda memiliki semua variabel yang dibutuhkan, setel klien baru SoapClient (wsdlurl. Settingsarray) void client - gt method (params) memanggil ini untuk mendapatkan tanggapan dari server responsestring client - gt getLastResponse () bagian ini menghapus barang mulai strpos (responsestring Mulai 1) dapatkan proksi proksi proksi proxy (wsdlurl. Settingsarray) proxy Anda dan isilah dengan server response proxy - gt SetCacheDocument (responsestring) dan proxy finallytheresultis - gt method (params) printr (danfinallytheresultis) ini memungkinkan Anda untuk melihat apa yang terjadi Metode sebelumnya adalah nama metode mis. MethodgetVersion params - tip khas untuk metode sabun Dengan menggunakan file WSDL adalah cara untuk pergi, bagaimanapun, untuk aplikasi khusus saya, LOCATION: PORT harus dinamis sehingga klien SOAP saya dapat memanggil layanan yang berbeda berdasarkan pada Domain klien Jika Anda menggunakan WSDL, SoapClient () memerlukan URL langsung ke URL yang sebenarnya dan tidak membiarkan Anda menggunakan file PHP yang menghasilkan XML WSDL yang dinamis sebagai gantinya. Jadi, akhirnya saya membuat WSDL terpisah untuk setiap layanan yang mungkin diperlukan dan harus mempertahankan semuanya jika deskripsi layanan berubah. Akhirnya, setelah beberapa permainan, saya bisa membuat halaman PHP dengan header tipe Mime yang tepat sehingga saya bisa mengelabui SoapClient () untuk berpikir bahwa file tersebut dilewatkan sebuah file dengan ekstensi. wsdl. Header (Content-Type: applicationxml charsetUTF-8) header (Content-Disposition: attachment filenamefilename. wsdl) baca di file handle fopen (wsdl. R) wsdlxml fread (handle. Filesize (wsdl)) fclose (handle) letakkan kode di sini untuk Ganti url dan port di xml Sekarang, untuk membuat karya ini, Anda tidak bisa hanya memanggil path relatif ke file. Saya percaya itu harus melalui Apache untuk benar mengatur header jenis mime, dll Jadi Anda akan menggunakan penuh. Alamat sebagai path ke file wsdl. php. . Di suatu tempat di kode klien sabun Anda soapclient new SoapClient (wsdlloc. Clientparamarray) Cara lain, mungkin tidak begitu bersih, cara untuk mencapai ini adalah memodifikasi file. htaccess Anda di direktori tempat file WSDL Anda ada untuk memaksa file. wsdl dijalankan melalui Mesin PHP Tambahkan berikut ini ke. htaccess: AddType applicationx-httpd-php. php. wsdl Anda kemudian dapat menempatkan cuplikan kode PHP dinamis dalam file. wsdl Anda untuk mengubah nilai apapun yang Anda butuhkan. Ada pro dan kontra untuk setiap solusi. Solusi Mime mungkin memungut pajak sistem lebih karena harus membaca file setiap kali permintaan sabun dibuat. Solusi htaccess membuatnya jadi Anda harus bergantung pada file. htaccess atau Apache conf. Yang dimodifikasi. Mungkin jika Anda mengatur soap. wsdlcacheenabled, menggunakan iniset (), ke 1 (default), caching akan membuatnya jadi tidak membaca file setiap saat untuk solusi Mime. Saya mengalami masalah yang sama saat mencoba memuatkan serat WDSL yang dilindungi oleh otentikasi http dasar, karena parameter login dan kata sandi hanya digunakan untuk permintaan namun tidak saat membaca file wdsl. Saya hanya menggunakan solusi berikut dengan mendownload file xml ke lokasi yang tidak terproteksi di server saya. Harap perhatikan bahwa ini tidak mendukung jenis caching apapun. Kelas ltphp SoapAuthClient meluas SoapClient Karena paket SOAP PHP tidak mendukung otentikasi dasar kelas ini mendownload file WDSL menggunakan paket cURL dan membuat salinan lokal wdsl di server Anda. Pastikan Anda memberikan parameter tambahan berikut pada pilihan Array: wdsllocalcopy gt true function SoapAuthClient (pilihan wdsl) jika (isset (opsi wdsllocalcopy) opsi ampamp wdsllocalcopy ampset isset benar (opsi login) ampamp isset (pilihan kata sandi)) file md5 Uniqid ()). False) throw new Exception (Tidak bisa membuat file WDSL lokal (. This - gt cachedir. File)) ch curlinit () credit (options login. :) Pilihan kata sandi) curlsetopt (ch. CURLOPTURL. wdsl) curlsetopt (ch. CURLOPTHTTPAUTH CURLAUTHBASIC) curlsetopt (ch. CURLOPTUSERPWD kredit) curlsetopt (ch. CURLOPTTIMEOUT 15) curlsetopt (ch. CURLOPTFILE fp) jika ((xml curlexec (Ch)) false) curlclose (ch) fclose (fp) unlink (this - gt cachedir file) buang Exception baru (curlerror (ch)) curlclose (ch) fclose (fp) wdsl this - gt cacheurl. File unset (pilihan wdsllocalcopy) tidak diset (pilihan wdslforcelocalcopy) echo wdsl parent. Membangun (wdsl. Options) unlink (this - gt cachedir. File) gtFollowing content telah ditangkap di TcpMon: Permintaan yang dibuat oleh SoapUI Pro 3.0.2: POST tf6servicesxdsrepositoryb HTTP1.1 Accept-Encoding: gzip, deflate Content-Type: jenis multipartrelasipengaklikasixopxml Mulai start-infoapplicationsoapxml action boundary ---- Part1728349551.1260534830078 MIME-Versi: 1.0 User-Agent: Jakarta Commons-HttpClient3.1 Host: ihexds. nist. gov:9080 Isi-Panjang: 13318 ------ Part1728349551. 1260534830078 Content-Type: applicationxopxml charsetUTF-8 typeapplicationsoapxml actionProvideAndRegisterDocumentSetRequest Content-Transfer-Encoding: 8bit Content-ID: ------ Part1728349551.1260534830078 Content-Type: textplain charsetus-ascii Content-Transfer-Encoding: 7bit Content-ID: Ltgt Ini adalah depek dokumen. Permintaan yang dibuat oleh alat xdstest: POST tf6servicesxdsrepositoryb HTTP1.1 Content-Type: multipartrelated boundaryMIMEBoundaryurnuuid613A2BD2D99F1E6B5912 60534073176 typeapplicationxopxml startlt0.urn: uuid: 613A2BD2D99F1E6B591260534073177 apache. orggt start-infoapplicationsoapxml actionurn: ihe: iti: 2007 rovideAndRegisterDocumentSet-b User-Agent: Axis2 Host: ihexds. nist. gov:9080 Transfer-Encoding: chunked 20f1 --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type: applicationxopxml charsetUTF-8 typeapplicationsoapxml Content-Transfer-Encoding: binary Content-ID: lt0.urn:uuid:613A2BD2D99F1E6B591260534073177apache. orggt --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content - Type: textplain Content-Transfer-Encoding: binary Content-ID: lt1. Guci: uuid: 613A2BD2D99F1E6B591260534073366apache. or g gt Ini adalah dokumen saya. Dari mana saya bisa mengatur Content-Transfer-Encoding sebagai biner Pada registri publik nist, Anda dapat melihat dokumen teks yang telah dikirim sebagai lampiran: Saya juga mencoba membuat Encode Attachments sebagai true di bawah TestRequest Properties. But its not working either. Terima kasih untuk bantuannya

No comments:

Post a Comment