Подтвердить что ты не робот

Можно ли позвонить в службу технической поддержки WCF Dynamics CRM 2011 без привязки к SDK - прямому настройке?

Я пытаюсь реализовать чистый сценарий WCF, где я хочу называть службу Dynamics CRM WCF, не полагаясь на вспомогательные классы SDK. В принципе, я хотел бы реализовать федеративную аутентификацию от Dynamics CRM 2011, используя только встроенную поддержку WCF из инфраструктуры .net.

Причина, по которой я делаю это, заключается в том, что я хотел бы позже переносить этот сценарий на BizTalk.

Я успешно создал прокси-классы с SvcUtil, но часть политик и утверждений безопасности несовместимы с схемой конфигурации. SvcUtil предлагает построить привязку из кода, а это то, что я пытаюсь сделать.

Полученный код здесь:

        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();
        }
    }

Я новичок в федеративной аутентификации, и мне сложно определить потенциальные различия между многими доступными привязками, поэтому я был бы благодарен за любую помощь в этом отношении.

4b9b3361

Ответ 1

Возможно, это возможно, но очень сложно. У нас был проект с использованием Dynamics, который перешел в ADFS и потребовал добавления большого количества дополнительного кода вокруг обновляющих токенов (код формы autorefreshsecuritytoken.cs, deviceidmanager.cs и toolserviceproxies.cs из SDK) и который все еще использовал SDK для всего.

Упомяните, что вам также нужна Windows. Идентификация, установленная в ОС, которая представляет собой еще один набор функций для копирования.

В конце вы всегда можете просто использовать JustDecompile или аналогично, чтобы узнать, что делает SDK.