تحويل رمز المثال WSE إلى WCF
-
13-09-2019 - |
سؤال
أنا جديد في كل من WSE و WCF وأنا أحاول أن أستهلك خدمة ويب باستخدام WCF ولكن كل الوثائق المثال مخصصة ل VS2005 + WSE. تستخدم خدمة الويب هذه WS-Security 1.0. لقد أضفت مرجعا للخدمة من خلال Visual Studio ولكني في خسارة حول كيفية القيام بالكائن المكافئ أدناه في WCF:
// 1. Initialize the web service proxy
PartnerAPIWse integrationFramework = new PartnerAPIWse();
// 2. Set the username/password. This is using the Username token of WS-Security 1.0
UsernameTokenProvider utp = new UsernameTokenProvider("username", "password");
integrationFramework.SetClientCredential<UsernameToken>(utp.GetToken());
// 3. Declare the policy
Policy policy = new Policy(new UsernameOverTransportAssertion());
integrationFramework.SetPolicy(policy);
المحلول
بعد قضاء يوم القيام ببعض التجريبات، اكتشفت كيفية تحويل هذا الرمز. كان المفتاح إنشاء الارتباطات على وكيل WCF الذي يجعل VS2008 بشكل صحيح.
- إضافة مرجع خدمة يشير إلى WSDL
افتح App.config / Web.config وتحديد موقع قسم System.servicemodel. قم بتغيير وضع الأمان على الصابورة الافتراضية لتكون النقل بغيرهاي. هنا هو ما بدا ملفي بعد التغيير:
<basicHttpBinding> <binding name="SoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="TransportWithMessageCredential"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding>
تغيير رمز المثال أعلاه لتبدو مثل هذا
Dim integrationFramework As New SoapClient() integrationFramework.ClientCredentials.UserName.UserName = "username" integrationFramework.ClientCredentials.UserName.Password = "password"
TransportWithMessageCEdential هو ما يعادل سياسة اسم المستخدمالأقل والأفعال
لا تنتمي إلى StackOverflow