Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在没有SDK直接定制绑定的情况下调用Dynamics CRM 2011晚绑定WCF组织服务?_C#_Wcf_Dynamics Crm 2011_Wcf Security_Wcf Client - Fatal编程技术网

C# 是否可以在没有SDK直接定制绑定的情况下调用Dynamics CRM 2011晚绑定WCF组织服务?

C# 是否可以在没有SDK直接定制绑定的情况下调用Dynamics CRM 2011晚绑定WCF组织服务?,c#,wcf,dynamics-crm-2011,wcf-security,wcf-client,C#,Wcf,Dynamics Crm 2011,Wcf Security,Wcf Client,我正在尝试实现一个纯WCF场景,在该场景中,我希望调用Dynamics CRM WCF服务,而不依赖SDK助手类。基本上,我希望仅使用.net framework提供的本机WCF支持来实现针对Dynamics CRM 2011的联合身份验证 我这样做的原因是我希望稍后将此场景移植到BizTalk 我已经成功地使用svcuti生成了代理类,但是部分策略和安全断言与配置模式不兼容。SvcUtil建议改为从代码构建绑定,这正是我试图做的 生成的代码如下所示: private stati

我正在尝试实现一个纯WCF场景,在该场景中,我希望调用Dynamics CRM WCF服务,而不依赖SDK助手类。基本上,我希望仅使用.net framework提供的本机WCF支持来实现针对Dynamics CRM 2011的联合身份验证

我这样做的原因是我希望稍后将此场景移植到BizTalk

我已经成功地使用svcuti生成了代理类,但是部分策略和安全断言与配置模式不兼容。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();
        }
    }

我是联邦身份验证新手,很难弄清楚许多可用绑定之间的潜在差异,因此我非常感谢在这方面提供的任何帮助。

这可能是可能的,但非常复杂。我们有一个使用Dynamics的项目,它转移到了ADFS,并且需要在刷新令牌(SDK中的代码形式autorefreshsecuritytoken.cs、devicemanager.cs和toolserviceproxies.cs)周围添加大量额外的代码,而该项目仍然在使用SDK进行所有操作

请记住,您还需要在操作系统中安装windows.identification,这是另一个需要复制的功能负载


最后,您可以使用JustDecompile或类似工具查看SDK正在做什么。

您知道如何做到这一点吗?您指的是什么SDK帮助程序类?我没有追求这一点,也从未发现。我称之为SDK助手类的是CRM 2011 SDK附带的各种示例。@MaximeLabelle您是否仍对如何实现这一点感兴趣,还是问题消失了?我仍然非常感兴趣。。。