2011-07-21 23 views
50

ben SDK yardımcı sınıflar dayanmadan Dynamics CRM WCF hizmetini aramak istediğiniz saf WCF senaryoyu uygulamaya çalışıyorum. Temel olarak, .net çerçevesinden yalnızca yerel WCF desteğini kullanarak Dynamics CRM 2011'a karşı federasyon kimlik doğrulaması uygulamak istiyorum.SDK'sız Dynamics CRM 2011 geçikmiş WCF Organizasyon servisini çağırmak mümkün mü?

Bunu yapmamın sebebi bu senaryo daha sonra açma BizTalk için liman istiyoruz olmasıdır.

başarıyla Svcutil ile vekil sınıfları oluşturulmuş, ama politika ve güvenlik iddiaların parçası yapılandırma şeması ile uyumlu değildir. SvcUtil, kodun yerine kodlamayı oluşturmayı önerir, bu da yapmaya çalıştığım şeydir. Ben federe kimlik doğrulama yeniyim ve birçok mevcut bağları arasındaki potansiyel farkları anlamakta zorlanıyorum

 private static void CallWcf() 
    { 
     OrganizationServiceClient client = null; 

     try 
     { 
      // Login Live.com Issuer Binding 

      var wsHttpBinding = new WSHttpBinding(); 
      wsHttpBinding.Security = new WSHttpSecurity(); 
      wsHttpBinding.Security.Mode = SecurityMode.Transport; 

      // Endpoint Binding Elements 

      var securityElement = new TransportSecurityBindingElement(); 
      securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.TripleDes; 
      securityElement.IncludeTimestamp = true; 
      securityElement.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy; 
      securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10; 
      securityElement.SecurityHeaderLayout = SecurityHeaderLayout.Strict; 

      var securityTokenParameters = new IssuedSecurityTokenParameters(); 
      securityTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient; 
      securityTokenParameters.ReferenceStyle = SecurityTokenReferenceStyle.Internal; 
      securityTokenParameters.RequireDerivedKeys = false; 
      securityTokenParameters.TokenType = null; 
      securityTokenParameters.KeyType = SecurityKeyType.SymmetricKey; 
      securityTokenParameters.KeySize = 192; 
      securityTokenParameters.IssuerAddress = new EndpointAddress("https://login.live.com/extSTS.srf"); 
      securityTokenParameters.IssuerMetadataAddress = null; 
      securityTokenParameters.DefaultMessageSecurityVersion = null; 
      securityTokenParameters.IssuerBinding = wsHttpBinding; 

      securityElement.EndpointSupportingTokenParameters.Signed.Add(securityTokenParameters); 

      var textMessageEncodingElement = new TextMessageEncodingBindingElement(); 
      textMessageEncodingElement.MaxReadPoolSize = 64; 
      textMessageEncodingElement.MaxWritePoolSize = 16; 
      textMessageEncodingElement.MessageVersion = MessageVersion.Default; 
      textMessageEncodingElement.WriteEncoding = System.Text.Encoding.UTF8; 

      textMessageEncodingElement.ReaderQuotas.MaxStringContentLength = 8192; 
      textMessageEncodingElement.ReaderQuotas.MaxArrayLength = 16384; 
      textMessageEncodingElement.ReaderQuotas.MaxBytesPerRead = 4096; 
      textMessageEncodingElement.ReaderQuotas.MaxNameTableCharCount = 16384; 

      var httpsTransportElement = new HttpsTransportBindingElement(); 
      httpsTransportElement.ManualAddressing = false; 
      httpsTransportElement.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous; 

      CustomBinding binding = new CustomBinding(); 
      binding.Elements.Add(securityElement); 
      binding.Elements.Add(textMessageEncodingElement); 
      binding.Elements.Add(httpsTransportElement); 

      client = new OrganizationServiceClient(binding, new EndpointAddress(EndpointUri)); 
      client.ClientCredentials.UserName.UserName = Username; 
      client.ClientCredentials.UserName.Password = Password; 
      client.Open(); 

      var columnSet = new schemas.microsoft.com.xrm._2011.Contracts.ColumnSet(); 
      var identifier = new Guid("fbf8240e-2c85-e011-ad55-1cc1de0878eb"); 

      columnSet.Columns = new string[] { "name" }; 
      var entity = client.Retrieve("account", identifier, columnSet); 
     } 

     finally 
     { 
      if (client != null) 
       client.Close(); 
     } 
    } 

, bu yüzden herhangi bir yardım için minnettar olacaktır:

çıkan kod burada bu konuda.

+1

Bunu nasıl yaptığını öğrendiniz mi? – cheeesus

+0

Ve hangi SDK yardımcı sınıflarını kastediyorsunuz? – cheeesus

+1

Bunu izlemedim ve asla öğrenmedim. SDK Yardımcısı Sınıfları dediğim, CRM 2011 SDK'sı ile birlikte gönderilen çeşitli örneklerdir. –

cevap

2

Muhtemelen mümkün, ama derece karmaşıktır. ADFS'ye taşınan Dynamics'i kullanan bir projemiz vardı ve canlandırıcı jetonlar (SDK'dan kod formu autorefreshsecuritytoken.cs, deviceidmanager.cs ve toolserviceproxies.cs) etrafında çok fazla kod eklemek ve SDK'yı her şey için kullanmaya devam etmek zorunda kaldık. Çıplak göz önünde

da kopyalamak için işlevsellik başka yüküdür OS yüklü windows.identification gerekir. Eğer her zaman sadece SDK ne yaptığını görmek için JustDecompile veya benzeri kullanabilirsiniz Sonunda

.

İlgili konular