ربط خدمة WCF باستخدام leteviniSecuRetransport = تسبب حقيقي في فشل مرجع خدمة التحديث في العميل

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

سؤال

هذا هو تكوين الخدمة الخاص بي في web.config:

<binding name="statefulSessionWithUsernameOverTransport">
  <security authenticationMode="SecureConversation"
    requireSecurityContextCancellation="False" allowInsecureTransport="True">
    <secureConversationBootstrap authenticationMode="UserNameOverTransport"/>
  </security>
  <binaryMessageEncoding />
  <httpTransport />
</binding>

<service name="com.example.FooService"
  behaviorConfiguration="usernamePasswordAuthBehavior">
  <endpoint contract="com.example.FooService.IFooService"
    address="custom" binding="customBinding"
    bindingConfiguration="statefulSessionWithUsernameOverTransport" />
</service>

أقوم بإعداد ALLENTINSECURETRANSPORT = صحيح لأنه في الإنتاج ستقوم الخدمة خلف SSL بإنهاء موازن التحميل. إن الاتصال بالخدمة من عميل .NET 4.0 الخاص بي يعمل دون أي مشاكل ولكن محاولة تحديث مرجع الخدمة في VS2010 يؤدي دائمًا إلى خطأ:

System.ServicEmodel.Channels.TransportSecurityBindingElement خطأ: فشلت تصدير سياسة الأمان. يحتوي الربط على نظام نقل الأمنية ، ولكن لا يوجد عنصر ربط أمن النقل الذي ينفذ ItRansportTokenSertionProvider. لا يتم دعم تصدير السياسة لمثل هذه السياسة.

أفهم ما تحاول أن تخبرني به - وهو ما قمت بتعطيل أمان النقل على الربط الذي يتطلب ذلك لتجنب التسوية لبيانات الاعتماد التي تسافر فوق السلك. لكن - هذا هو بيت القصيد leviniinsecuretransport. هل يمكن أن يكون مولد الوكيل ببساطة لا يدرك هذه السمة؟

تحديث:

يبدو أن مولد WSDL غير قادر بالفعل على التعامل مع السمة. اضطررت إلى العودة إلى أمان مستوى الرسائل وشهادة موقعة ذاتيا للتنمية. كان باستخدام أمان الرسائل ميزة القدرة على التمسك بـ Cassini للتنمية بدلاً من الذهاب إلى IIS بالكامل.

<wsHttpBinding>
    <binding name="wshttpDevelopmentBinding">
      <security mode="Message">
        <message clientCredentialType="UserName" />
      </security>
    </binding>
</wsHttpBinding>
هل كانت مفيدة؟

المحلول

واجهت هذه القضية نفسها. يبدو أن المشكلة هي نقل HTTP لأنه لا ينفذ واجهة ItRansportTokenSertionProvider ، لكن HTTPS لا يفعل ذلك. لقد تمكنت من الالتفاف على هذه الطريقين: قم بتبديل الربط المخصص لاستخدام HTTPS Transport ، والذي يطرح الواجهة ، وإضافة EnableUnsecuredResponse = "True" إلى عنصر الأمان في التكوين ، أو كتابة ملزمة مخصصة مستمدة من httptransportbindingele ولكن تنفيذها واجهة ضرورية.

نصائح أخرى

قرأت عن هذه المرات القليلة (على سبيل المثال هنا أو هنا) لكنني لم أجربها أبدًا. يبدو وكأنه خطأ في تصدير WSDL لأنه عند تكوين الخدمة والعميل يدويًا ، يجب أن يعمل ولكن تصدير البيانات الوصفية لا يعمل. الرابط الثاني يقترح بعض الحلول ولكنه القبيح.

اقتراحي هو التطوير باستخدام LegleInsecurtRansport تعيين على False و HTTPs مع شهادة الاختبار وتبديل هذا التكوين عند نشر التطبيق (يمكن أن تكون جزءًا من حزمة التثبيت).

واجهت قضية مماثلة. لقد قمت بتثبيت Hot Fix لـ .NET Framework 3.5 على آلات العميل ، وقد عملت بعد ذلك.

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