خطأ خدمة الويب "ليس لديه مُنشئ بدون معلمة"
-
26-09-2019 - |
سؤال
لقد قمت بإنشاء خدمة ويب ، والتي يمكنها طريقة لتعيين بيانات اعتماد المستخدم باستخدام 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.