Подключение к веб-службе WSE 3.0 с клиента WCF

У меня проблемы с подключением к стороннему веб-сервису WSE 3.0 из клиента WCF. Я реализовал пользовательский класс привязки, как указано в этой статье:

http://msdn.microsoft.com/en-us/library/ms734745.aspx

Кажется, проблема связана с утверждением безопасности, используемым веб-сервисом - UsernameOverTransport.

Когда я пытаюсь вызвать метод, я получаю следующее исключение:

System.InvalidOperationException: The 'WseHttpBinding'.'[namespace]' binding for the 'MyWebServiceSoap'.'[namespace]' contract is configured with an authentication mode that requires transport level integrity and confidentiality. However the transport cannot provide integrity and confidentiality..

Он ожидает имя пользователя, пароль и номер CN. В примере кода, предоставленном нам поставщиком, эти учетные данные связаны в Microsoft.Web.Services3.Security.Tokens.UsernameToken. Вот пример, предоставленный продавцом:

MyWebServiceWse proxy = new MyWebServiceWse();

UsernameToken token = new UsernameToken("Username", "password", PasswordOption.SendPlainText);

token.Id = "<supplied CN Number>";

proxy.SetClientCredential(token);

proxy.SetPolicy(new Policy(new UsernameOverTransportAssertion(), new RequireActionHeaderAssertion()));

MyObject mo = proxy.MyMethod();

Это прекрасно работает с приложением 2.0 с WSE 3.0. Вот фрагмент кода от моего клиента WCF:

EndpointAddress address = new EndpointAddress(new Uri("<web service uri here>"));

WseHttpBinding binding = new WseHttpBinding(); // This is the custom binding I created per the MS KB article

binding.SecurityAssertion = WseSecurityAssertion.UsernameOverTransport;
binding.EstablishSecurityContext = false;

// Not sure about the value of either of these next two
binding.RequireDerivedKeys = true;
binding.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

MembershipServiceSoapClient proxy = new MembershipServiceSoapClient(binding, address);

// This is where I believe the problem lies – I can’t seem to properly setup the security credentials the web service is expecting 

proxy.ClientCredentials.UserName.UserName = "username";
proxy.ClientCredentials.UserName.Password = "pwd";
// How do I supply the CN number?                      

MyObject mo = proxy.MyMethod(); // this throws the exception

Я просматривал сеть в поисках ответа на этот вопрос. Некоторые источники меня близко (например, статья в MS KB), но я, похоже, не могу преодолеть эту проблему. Кто-нибудь может мне помочь?

Ответы на вопрос(2)

Ваш ответ на вопрос