Транспортная безопасность между сервисом Metro и клиентом WCF - PullRequest
5 голосов
/ 05 мая 2011

ОБНОВЛЕНО

У меня есть Metro 2.1.1 WebService, защищенный механизмом Transport Security (SSL).Я хочу получить доступ к этому сервису с помощью .NET 3.5+ клиента WCF.Я нашел эту ссылку , которая решает ту же проблему, но я все еще не смог сделать работающий клиент.Я думаю, что я путаю вещи в конфигурации клиента.

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Команда WCF выпустила набор привязок взаимодействия на этой ссылке. В этом сообщении в блоге содержится подробная информация о том, как их использовать. Одна из поддерживаемых привязок предназначена специально для службы на базе Metro. Не пытался установить эту привязку, но кажется, что этот сценарий покрыт.

1 голос
/ 11 сентября 2011

Код клиента :

//IMPORTANT - THIS LINE IS ONLY FOR TESTING PURPOSES!
//This code is for accepting self-signed server certificate
ServicePointManager.ServerCertificateValidationCallback += (sender_ws, cert, chain, sslPolicyErrors) => true;

//instantiate transport binding element, leave the defaults
HttpsTransportBindingElement transport = new HttpsTransportBindingElement();

//instantiate message encoding element, where message version must be Soap11WSAddressing10 to match metro web service requirement.
TextMessageEncodingBindingElement text = new TextMessageEncodingBindingElement();
text.MessageVersion = MessageVersion.Soap11WSAddressing10;

//instantiate transport security binding element, with all the suggested values in app.config
TransportSecurityBindingElement b_element = new TransportSecurityBindingElement();
b_element.DefaultAlgorithmSuite = new Basic128SecurityAlgorithmSuite();
b_element.IncludeTimestamp = true;
b_element.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
b_element.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11;
b_element.SecurityHeaderLayout = SecurityHeaderLayout.Lax;

//instantiate the custom binding and add the elements created above
CustomBinding customBinding = new CustomBinding();
customBinding.Name = "myOwnPersonalCustomBinding";
customBinding.Elements.Add(b_element);
customBinding.Elements.Add(text);
customBinding.Elements.Add(transport);

//instantiate the client

Uri uri = new Uri("https://localhost:8181/test/hello");
HelloWebServiceClient  wsClient = new HelloWebServiceClient (customBinding, new EndpointAddress(uri));
//Call
richTextBox1.Text = wsClient.hello(textBox1.Text);
...