سؤال

وأواجه مشكلة مع دلفي 2007 عند محاولة تستهلك خدمة ويب لقد أنشئت في جافا باستخدام JAX-WS. خدمة على شبكة الإنترنت يمكن أن تستهلك ما يرام من برنامج جافا آخر، ومن C # / ASP.NET 2.0 الموقع. ومع ذلك، عندما أحاول الوصول إلى نفس الخدمة باستخدام المستورد WSDL في دلفي 2007 (التصحيح 17 ديسمبر 2007)، لا تعترف خدمة الويب JAX-WS أي من المعلمات أنا اقراره والقيم الخالية منها.

ولقد دققت في رسالة SOAP التي يجري تمريرها من قبل دلفي ومقارنة بينها وبين الآخرين، وأنها جميلة متطابقة كثيرا (باستثناء بعض DECS مساحة negligable ومجموعة كبيرة من حالة العرض من واحدة. NET!)

ولقد كنت أيضا جميع أنحاء الشبكة العالمية (وصلة مفيدة للغاية الدكتور بوب <لأ href = "http://www.bobswart.nl/Weblog/Blog.aspx؟RootId=5:798" يختلط = "نوفولو noreferrer "> http://www.bobswart.nl/Weblog/Blog.aspx؟RootId=5:798 ) ولكن لا فرح.

وقد أي شخص يأتي عبر هذا من قبل؟

وTIA.


والملحمة لا تزال!

وبعد اللواط حول بهدف HTTPRIO لمحاولة الحصول على عمل أعطى في نهاية المطاف، وحاول نقل XML الثابت على مدى HTTP. تفشل.

حسنا، لقد بنيت اختبار بسيط في C #، وحاول ذلك. يعمل أي مشكلة.

وعن طريق عازف الكمان لمعرفة ما كان يجري إرسالها إلى الوراء وإلى الأمام يبدو أن الفرق الوحيد هو في مساحات. لقد غيرت مساحات الأسماء في XML ترسل في دلفي و... يعمل!

وكانت هذه عينة من XML الأصلي يتم توليدها من قبل WSDLImporter:

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
        <version xmlns="http://path.to.service.com/">
            <input>test</input>
        </version>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

وهنا هو ما يعمل في الواقع:

<?xml version="1.0"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:version xmlns:ns2="http://path.to.service.com/">
            <input>test</input>
        </ns2:version>
    </S:Body>
</S:Envelope>

وحتى الآن، وأنا أعلم هذا، وأنا لا أذهب حول تغيير القيم مساحة لرمز WSDLImporter؟ لا أستطيع أن أرى أي شيء واضح على خصائص HTTPRIO.

وTIA

هل كانت مفيدة؟

المحلول

وHA HA الأرواح IT !!!

وأساسا كان لي لإخراج الموصى بها

InvRegistry.RegisterInvokeOptions(TypeInfo(ActivityService), ioDocument);

ووإجبارها على استخدام ثانية. 5 الترميز. يتم إنشاء مساحات الأسماء على النحو المطلوب ويتم تمرير المعلمات إلى خدمة ويب جافا.

والحق، تحتاج البيرة، والكثير من البيرة:)

نصائح أخرى

ويجب عليك فقط التعليق هذا الخط في WSDL الخاص بك:

//InvRegistry.RegisterInvokeOptions(TypeInfo(WebService), ioDocument);

وهذا يكفي ... التمتع بها.

وليس الحل لمشكلتك، ولكن لقد كنت في ورطة مؤخرا مع نفس البيئة. اضطررت لتغيير خيارات عدة مرات حتى تجد الطريقة الصحيحة لتستهلك خدمة ويب (writen في C #).

وتحقق:

- THTTPRIO.Converter.Options
- THTTPRIO.HTTPWebNode
- THTTPRIO.HTTPWebNode.InvokeOptions

وأنا خبطت رأسي ضد الجدار لمدة يومين، حتى وجدت هذا المنصب ... وجوائز سيزار تلميح للتحقق THTTPRIO.Converter.Options ... حاولت كل شيء تقريبا، وكان آخر واحد لتحديد soXXXXHdr إلى true -> ثم حدث شيء غريب، لا أكثر بالقيم الفارغة إلى الخادم: يا ...

وأنا لا أعرف لماذا هذا الإعداد يجعل القيم تمر، فإنه يفعل ذلك بالضبط (على الأقل بالنسبة لي).

وسيكون أمرا رائعا إذا شخص يفهم ما يحدث في الواقع من شأنه أن يفسر ذلك.

وإزالة soSendMultiRefObj من Converter.Options يساعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top