سؤال

أنا جديد في كل من 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 بشكل صحيح.

  1. إضافة مرجع خدمة يشير إلى WSDL
  2. افتح 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>
    
  3. تغيير رمز المثال أعلاه لتبدو مثل هذا

    Dim integrationFramework As New SoapClient()
    integrationFramework.ClientCredentials.UserName.UserName = "username"
    integrationFramework.ClientCredentials.UserName.Password = "password"
    

TransportWithMessageCEdential هو ما يعادل سياسة اسم المستخدمالأقل والأفعال

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