خطأ wsdl.exe:غير قادر على استيراد الربط '...' من مساحة الاسم '...'

StackOverflow https://stackoverflow.com/questions/77534

  •  09-06-2019
  •  | 
  •  

سؤال

عند تشغيل wsdl.exe على WSDL قمت بإنشائه، يظهر لي هذا الخطأ:

خطأ:غير قادر على استيراد الربط "SomeBinding" من مساحة الاسم "SomeNS".

  • غير قادر على استيراد العملية 'someOperation'.
  • لا يجوز اشتقاق هؤلاء الأعضاء.

أنا أستخدم أسلوب المستند الحرفي، وحسب علمي فإنني أتبع جميع القواعد.

باختصار، لدي WSDL صالح، لكن الأداة لا تحبه.

ما أبحث عنه هو ما إذا كان شخص ما لديه الكثير من الخبرة في استخدام أداة wsdl.exe ويعرف بعض الأمور السرية التي لا أعرفها.

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

المحلول

لقد واجهت نفس رسالة الخطأ.بعد البحث لفترة من الوقت، اكتشفت أنه يمكن توفير ملفات xsd بالإضافة إلى ملف wsdl.لذا تم تضمين/استيراد ملفات .xsd بالإضافة إلى .wsdl في نهاية أمر wsdl كما يلي:

wsdl.exe myWebService.wsdl myXsd1.xsd myType1.xsd myXsd2.xsd ...

أعطى Wsdl بعض التحذيرات ولكنه أنشأ واجهة خدمة جيدة.

نصائح أخرى

في بعض الأحيان يتعين عليك تغيير الرمز الخاص بك.يجب ألا تكون أسماء أجزاء الرسالة هي نفسها ؛)

<wsdl:message name="AnfrageRisikoAnfrageL">
    <wsdl:part name="parameters" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
    <wsdl:part name="parameters" element="his1_0:typeOut"/>
</wsdl:message>

الى هذا:

<wsdl:message name="AnfrageRisikoAnfrageL">
    <wsdl:part name="in" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
    <wsdl:part name="out" element="his1_0:typeOut"/>
</wsdl:message>

@thehhv الحل صحيح.هناك حل بديل لا يتطلب منك الإضافة xsdباليد.

انتقل إلى خدمتك ثم بدلا من الذهاب ?wsdl اذهب إلى ?singleWsdl (لقطة الشاشة أدناه)

enter image description here

ثم احفظ الصفحة باسم .wsdl ملف (سيقدم .svc لذا قم بتغييره)

ثم افتح Visual studio command prompt يمكنك العثور عليه في (Win 7) ابدأ -> كافة البرامج -> Visual studio 2013 -> أدوات Visual Studio -> VS2013 x64 Native Tools موجه الأوامر (يمكن أن يكون شيئًا مشابهًا)
ثم قم بتشغيل الأمر التالي في Visual studio command prompt (حيث بدلاً من C:\WebPricingService.wsdl هو المكان الذي قمت بحفظ wsdl الخاص بك فيه، إلا إذا حدث أننا نفكر بشكل متشابه إلى حد كبير واخترنا نفس اسم الملف والموقع وهو أمر مثير للقلق)

wsdl.exe C:\WebPricingService.wsdl

يجب أن يوفر لك بعض التحذيرات كما قال @thehhv ولكن مع الاستمرار في إنشاء العميل C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\WebPricingService.cs (أو أينما يتم وضعه على جهازك - تحقق من إخراج وحدة التحكم حيث يقرأ "كتابة الملف")

enter image description here

نأمل أن يوفر لك هذا بعض الوقت.

في حالتي كانت المشكلة مختلفة، وتم وصفها بشكل جيد هنا:

عندما يكون اسم الجزء هو "المعلمات"، يتم استخدام doc/lit/wrapped المفترض من Net ويقوم بإنشاء الوكيل وفقًا لذلك.إذا تم استخدام كلمة "معلمات" على الرغم من أن wsdl ليس doc/lit/wrapped (كما في المثال الأخير)، فقد يعطينا .Net بعض الأخطاء.أي خطأ؟لقد خمنت بشكل صحيح:"لا يجوز اشتقاق هؤلاء الأعضاء".الآن يمكننا أن نفهم ما يعنيه الخطأ:يحاول .Net حذف العنصر الجذر لأنه يعتقد أنه تم استخدام doc/lit/wrapped.ومع ذلك، لا يمكن إزالة هذا العنصر لأنه ليس وهميًا - يجب أن يختاره المستخدم بشكل نشط من بين عدد قليل من الأنواع المشتقة.

الإصلاح هو كما يلي، وعملت تماما بالنسبة لي:

طريقة إصلاحها هي فتح wsdl في محرر النصوص وتغيير اسم الجزء من "حدود" ل "المعلمات 1".الآن سيعرف .Net كيفية إنشاء وكيل doc/lit/bare.وهذا يعني أن فئة مجمعة جديدة ستظهر كمعلمة جذر في الوكيل.على الرغم من أن هذا قد يكون واجهة برمجة التطبيقات مملة بعض الشيء، إلا أنه لن يكون له أي تأثير على تنسيق السلك ويكون الوكيل قابلاً للتشغيل المتبادل بشكل كامل.

(التأكيد مني)

في حالة اصطدام شخص ما بهذا الجدار، فإليك سبب الخطأ في حالتي:

لدي عملية:

<wsdl:operation name="FormatReport">
  <wsdl:documentation>Runs a report, which is returned as the response</wsdl:documentation>
  <wsdl:input message="FormatReportRequest" />
  <wsdl:output message="FormatReportResponse" />
</wsdl:operation>

الذي يأخذ مدخلا:

<wsdl:message name="FormatReportRequest">
  <wsdl:part name="parameters" element="reporting:FormatReportInput" />
</wsdl:message>

وعملية أخرى:

<wsdl:operation name="FormatReportAsync">
  <wsdl:documentation>Creates and submits an Async Report Job to be executed asynchronously by the Async Report Windows Service.</wsdl:documentation>
  <wsdl:input message="FormatReportAsyncRequest" />
  <wsdl:output message="FormatReportAsyncResponse" />
</wsdl:operation>

أخذ المدخلات:

  <wsdl:message name="FormatReportAsyncRequest">
    <wsdl:part name="parameters" element="reporting:FormatReportInputAsync" />
  </wsdl:message>

وعناصر الإدخال هي أمثلة على نوعين:

<xsd:element name="FormatReportInput" type="reporting:FormatReportInputType"/>
<xsd:element name="FormatReportInputAsync" type="reporting:FormatReportAsyncInputType"/>

هنا هو المصيد - reporting:FormatReportAsyncInputType النوع يمتد (مشتق من) reporting:FormatReportInputType يكتب.هذا ما يبدو أنه يخلط بين الأداة ويتسبب في عدم اشتقاق هؤلاء الأعضاء ". خطأ.يمكنك الالتفاف حول هذا الاقتراح التالي في الإجابة المقبولة.

في حالة قيامك بذلك باستخدام UPS Shipping wsdl وترغب في تبديل dev إلى عناوين url الخاصة بالمنتج عندما تقوم بالإنشاء لمناطق مختلفة (debug، dev، prod) وما إلى ذلك.يمكنك استخدام الأمر أدناه لإنشاء ملف vb أو C# من ملف Ship.wsdl ثم تجاوز القيم في ملف Ship.vb في هذه الحالة.

WSDL /Language:VB /out:"C:\wsdl\Ship.vb" "C:\wsdl\Ship.wsdl"  C:\wsdl\UPSSecurity.xsd  C:\wsdl\ShipWebServiceSchema.xsd  C:\wsdl\IFWS.xsd  C:\wsdl\common.xsd
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top