سؤال

أنا جديد جدًا على الصابون ، لذا اذهب بسهولة علي. أحاول إعداد خدمة صابون تقبل تنسيق الرأس التالي:

<soap:Header>
   <wsse:Security>
      <wsse:UsernameToken wsu:Id='SecurityToken-securityToken'>
         <wsse:Username>Username</wsse:Username>
         <wsse:Password>Password</wsse:Password>
         <wsu:Created>Timestamp</wsu:Created>
      </wsse:UsernameToken>
   </wsse:Security>
</soap:Header>

التطبيق الذي أقوم بدمجه في هذه الخدمة هو تطبيق ويب ASP.NET 3.5 وقد قمت بالفعل بإعداد نقطة نهاية الصابون باستخدام WCF. لقد قمت بإعداد خدمة أساسية للتأكد من أن WCF يعمل ويعمل بشكل جيد (تجاهل الرأس). سمعت أن التنسيق أعلاه يتبع WS-Security ، لذا أضفت wshttpbinding في web.config:

<service name="Nexternal.Service.XMLTools.VNService"
         behaviorConfiguration="VNServiceBehavior">
  <!--The first endpoint would be picked up from the confirg
  this shows how the config can be overriden with the service host-->
  <endpoint address=""
            binding="wsHttpBinding"
            contract="Nexternal.Service.XMLTools.IVNService"/>
</service>

قمت بتنزيل تسخير اختبار (Soapui) ولصقه في رسالة اختبار مع الرأس أعلاه وعاد مع خطأ في طلب 400.

... لما يستحق ، أقوم بتشغيل Visual Studio 2008 باستخدام IIS7.

أشعر أنني ذاهب في دوائر ، لذا فإن أي مساعدة ستكون رائعة. شكرا مقدما.

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

المحلول

اكتشفه. تمكنت من تخصيص ما تم إنشاؤه في WSDL باستخدام MessageContracts (http://msdn.microsoft.com/en-us/library/ms730255.aspx). هذا سمح لي بتحديد تنسيق الرأس. لكل عقدة تحتوي على العقد الفرعية ، قمت بإنشاء فئة لتمثيل تلك العقدة واستخدمت أدوات تسلسل .NET (على سبيل المثال XmlElementAttribute, XmlArrayAttribute, ، وما إلى ذلك) لتحديد كيف ينبغي أن ينعكس هذا في المولد WSDL. DataContract يمكن أيضًا استخدامها على الرغم من فهمي DataContract كان فقط للتنسيقات الأساسية ولا تسمح لك بالغطس حقًا في كيفية تنسيقه.

آمل أن يساعد هذا أي شخص لديه مشاكل مماثلة.

إذا كان أي شخص يعرف المزيد عن الصابون يجد عيبًا ، فيرجى إبلاغي بذلك. المدخلات موضع تقدير كبير.

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