سؤال

لقد قمت بإنشاء خدمة ويب ، والتي يمكنها طريقة لتعيين بيانات اعتماد المستخدم باستخدام Microsoft.Web.Services3.WebServicesClientProtocol. رمز العينة هو:

<WebMethod()> _
    Public Sub ClientCredential1(Of TSecurityToken As SecurityToken)_
         (ByVal UserCred As Microsoft.Web.Services3.Security.Tokens.UsernameToken)

        Dim cProxy As New Microsoft.Web.Services3.WebServicesClientProtocol()
        cProxy.SetClientCredential(UserCred)
    End Sub

عندما أقوم بتشغيل خدمة الويب ، فإنه يعطي هذا الخطأ:

"Microsoft.Web.Services3.security.tokens.usernametoken لا يمكن تسلسلها لأنه لا يحتوي على مُنشئ بدون معلمة."

هل يعرف أي شخص أين المشكلة؟

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

المحلول

جذر المشكلة هنا هو أن الفصل Microsoft.Web.Services3.Security.Tokens.UsernameToken ليس لديه مُنشئ أقل معلمة. لقد حصلت على 3 منهم ، لكنهم يطلبون جميعًا معلمة. منشئات usernametoken على MSDN.

  • UsernameToken (XmlElement)
  • UsernameToken (String, String)
  • UsernameToken (String, String, PasswordOption)

تكمن المشكلة في أنه أثناء هجره ، يقوم XMlSerializer باستدعاء مُنشئ المعلمة لإنشاء مثيل لتلك الفئة. لا يمكن أن يفرز نوعًا لا يحتوي على مُنشئ بدون معلمة.

أشعر أنه لا يوجد الكثير مما يمكنك القيام به للتغلب على هذه المشكلة. أقترح فقط إنشاء فئة جزئية ، وتنفيذ مُنشئ الصفر على العار بنفسك.

'ensure namespacing is correct.
Public Partial Class UsernameToken
    Public Sub New()
    End Sub    
End Class

نصائح أخرى

ص. Campbell على حق ، فذلك لأن XMlSerializer يتطلب مُنشئًا بدون معلمة.

لا أعرف WSE ، لكن من النظر إليه هذا المشنور على مدونة مدونة Aleem ، لا أعتقد أنه من المفترض أن يتم تمرير UsernameToken كحجة منتظمة إلى طريقة ويب - من المفترض أن يتم تمريرها في رؤوس صابون WS -Security. تحصل على الوكيل لتمريره في الرؤوس عن طريق الاتصال setClientCredential (). إليك المثال من منشور المدونة أعلاه:

Dim oService As New WSETestService.ServiceWse

Dim U As New UsernameToken(“<User_Name>”, “<Password>”, PasswordOption.SendHashed)
oService.SetClientCredential(U)

لا يمكنك استخدام معلمة من النوع Microsoft.Web.Services3.Security.Tokens.UsernameToken في خدمة ويب ، لأنه لا يمكن التسلسل (أو بشكل أكثر تحديداً غير ممكن للخروج).

قم بإنشاء فئة تحتوي فقط على البيانات التي تحتاجها لإنشاء ملف UsernameToken واستخدام كنوع المعلمة. لن يخلق جانب العميل UsernameToken كائن على أي حال ، هناك فئة وكيل تم إنشاؤه من معلومات WSDL.

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