Próbuję zaimplementować czysty scenariusz WCF, w którym chcę zadzwonić pod numer usługi WCF Dynamics CRM bez polegania na klasach pomocnika SDK. Zasadniczo chciałbym zaimplementować uwierzytelnianie stowarzyszone przeciwko Dynamics CRM 2011 przy użyciu tylko macierzystej obsługi WCF ze środowiska .net.Czy można wywołać późno powiązaną usługę organizacji WCF firmy Dynamics CRM 2011 bez SDK - proste niestandardowe powiązanie?
Powodem, dla którego to robię jest to, że chciałbym przenieść ten scenariusz później do BizTalk.
Pomyślnie wygenerowałem klasy proxy za pomocą SvcUtil, ale część zasad i asercje zabezpieczeń nie są zgodne ze schematem konfiguracji. SvcUtil sugeruje zbudowanie powiązania z kodu, co jest tym, co próbuję zrobić.
Otrzymany kod jest tutaj:
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();
}
}
Jestem nowy uwierzytelniania stowarzyszonego i mam twardy czas na zastanawianie się ewentualnych różnic pomiędzy wielu dostępnych wiązań, więc byłbym wdzięczny za wszelką pomoc w z tego względu.
Czy kiedykolwiek dowiedziałeś się, jak to zrobić? – cheeesus
A jakie klasy pomocników SDK masz na myśli? – cheeesus
Nie dążyłem do tego i nigdy się nie dowiedziałem. To, co nazywam klasami pomocniczymi SDK, to różne próbki dostarczane z pakietem SDK 2011 CRM. –