2009-04-22 11 views
5

Hem WSE hem de WCF için yeniyim ve WCF kullanarak bir web hizmeti kullanmaya çalışıyorum ancak tüm örnek belgeler VS2005 + WSE için. Bu web hizmeti WS-Security 1.0 kullanıyor. Bu kodu dönüştürmek için nasıl düşündüm Bazı deneyler yaparak bir gün geçirdikten sonraWSE örnek kodunu WCF'ye dönüştürme

// 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); 
+0

altında UsernameOverTransportAssertion politikasına eşdeğerdir: İşte benim dosya değişiklikten sonra neye benzediğini olduğunu Gelecekte referans için: WSE eskidir. Tüm yeni web servis geliştirme WCF kullanılarak yapılmalı ve WSE kodu ASAP'tan çekilmelidir. –

+5

Bazı şirketlerin WSE'ye büyük bir yatırımı var. Belirli bir teknoloji neslini terk etmek her zaman ticari olarak sağlam bir karar değildir, çünkü satıcı yeni bir şey çıkarmıştır. –

+0

Bu soru ve cevap faydalı; Ancak, bazı durumlarda, ortaya çıkan güvenlik üstbilgisi "nonce" ve diğer kritik elementlerden/özniteliklerden yoksundur. Aşağıdaki soru ve cevap bu soruna işaret eder: http://stackoverflow.com/questions/3102693/error-in-wcf-client-consuming-axis-2-web-service-with-ws-security-usernametoken-p – Brett

cevap

8

: Görsel stüdyo aracılığıyla bir hizmet başvurusu eklemiş ama WCF aşağıdaki kod eşdeğer nasıl yapılacağına ilişkin bir kayıp am . Anahtar, VS2008'in doğru yaptığı WCF proxy'sindeki bağlamaları kuruyordu.

  1. WSDL
  2. Açık App.config/Web.config bir hizmet referans işaret ekleyin ve System.ServiceModel bölümünü bulun. Varsayılan sabunlaştırmadaki güvenlik modunu TransportWithMessageCredential olarak değiştirin.

     <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. Değişim Yukarıdaki örnek kod, bu

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

TransportWithMessageCredential benzemeye WSE 3.0