ВИПРАВЛЕННЯ: Виправлення, яке дозволяє WCF надсилати повідомлення, захищене і отримання незахищене відповідей і надіслати незахищене повідомлення і отримати відповіді в неправильному, доступний для в .NET Framework 3.5 SP1


ВСТУП


Windows Communication Foundation (WCF) не має функції надсилати повідомлення, захищене і потім, отримують незахищене відповіді, або для надіслати незахищене повідомлення й отримувати відповіді в неправильному. Виправлення, описане в цій статті, додає атрибут enableUnsecuredResponse . За промовчанням значення атрибута enableUnsecuredResponse невірна. Якщо встановити значення цей атрибут значення true, у WCF ввімкнено такі нові функції:
  • WCF клієнти можуть надходити незахищене відповіді, навіть якщо, забезпечених вихідних повідомлень за допомогою протоколу Secure Socket Layer (SSL) для входу в тілі повідомлення.
  • Служби WCF, можна надіслати незахищене відповідей, що мають без безпеки-заголовка SOAP Конверти навіть, якщо запит безпечне.
Примітка. Атрибут enableUnsecuredResponse , лише, застосовується лише до CustomBinding типу.

Вирішення


Якщо використовується .NET Framework 3.0, інсталюйте виправлення, яке описано у статті бази знань для Microsoft на основі:
ВИПРАВЛЕННЯ в 967105 : виправлення, яке дозволяє WCF, надіслати повідомлення, захищене та отримати небезпечними, відповіді та надіслати незахищене повідомлення й отримувати відповіді в неправильному, доступний для .NET Framework 3.0
Якщо ви використовуєте .NET Framework 3.5 із пакетом оновлень 1 для Windows 7 або Windows Server 2008 R2, інсталюйте виправлення, яке описано у статті бази знань для Microsoft на основі:
977420 зведення виправлень доступне виправлення неполадок у Windows Communication Foundation в .NET Framework 3.5 SP1 для ОС Windows 7 і Windows Server 2008 R2
Якщо ви використовуєте .NET Framework 3.5 із пакетом оновлень 1 в інших операційних системах, інсталюйте таке виправлення для вирішення проблеми.

Корпорація Майкрософт випустила підтримуване виправлення доступна. Проте призначена для вирішення проблеми, описаної в цій статті. Він придатний лише для систем, які зазнають цієї конкретної проблеми. Те, що це виправлення може потребувати додаткового тестування. Таким чином, якщо ви не завдає значної, ми рекомендуємо почекати до виходу чергового пакета оновлень, що містить це виправлення.

Щоб негайно вирішити цю проблему, зверніться до служби підтримки Microsoft, щоб отримати виправлення. Повний перелік телефонів служби підтримки користувачів корпорації Майкрософт а також відомості про вартість обслуговування відвідайте веб-сайт корпорації Майкрософт:Примітка. В окремих випадках оплату звернення до служби підтримки може бути скасовано якщо технічної підтримки Майкрософт визначить, що телефонів служби. Плата стягується на додаткові питання і проблеми, які не пов'язані з оновленням.

Попередні вимоги

Щоб застосувати це виправлення, потрібно мати .NET Framework 3.5 із пакетом оновлень 1.

Необхідність перезавантаження

Перезавантажте комп'ютер, після застосування цього виправлення, якщо використовується не екземпляр .NET Framework не потрібно.

Відомості про заміну виправлень

Це виправлення не замінює жодних інших виправлень.

Відомості про файли

Англійська версія цього виправлення на комп'ютері має атрибути файлів (або новіші атрибути файлів), подані в нижченаведеній таблиці. Значення дати й часу для цих файлів наведено за всесвітнім координованим часом (UTC). Переглядаючи відомості про файл, час конвертується у місцевий час. Щоб визначити різницю між UTC і місцевим часом, використайте вкладку Часовий пояс у Дата й час на панелі керування.
Відомості про файли для всіх процесорів x86 ОС Windows Server 2003 та Windows XP
Ім'я файлуВерсія файлуРозмір файлуДатаЧасПлатформа
Servicemonikersupport.dll3.0.4506.411917,24001 червня 2009 року.22:56x86
System.runtime.serialization.dll3.0.4506.4119970,75201 червня 2009 року.22:56x86
System.servicemodel.dll3.0.4506.41195,931,00801 червня 2009 року.22:56x86
Відомості про файли для всіх процесорів x64 ОС Windows Server 2003 та Windows XP
Ім'я файлуВерсія файлуРозмір файлуДатаЧасПлатформа
Servicemonikersupport.dll3.0.4506.411919,30401 червня 2009 року.22:28x64
System.runtime.serialization.dll3.0.4506.4119847,87201 червня 2009 року.22:28x64
System.servicemodel.dll3.0.4506.41195,267,45601 червня 2009 року.22:28x64
Відомості про файли для всіх процесорів x86 ОС Windows Vista SP2 та Windows Server 2008 SP2
Ім'я файлуВерсія файлуРозмір файлуДатаЧас
Servicemonikersupport.dll3.0.4506.412017,24010-Jun-200906:55
System.runtime.serialization.dll3.0.4506.4120970,75210-Jun-200906:55
System.servicemodel.dll3.0.4506.41205,935,10410-Jun-200906:55
Відомості про файли для всіх процесорів x64 ОС Windows Vista SP2 та Windows Server 2008 SP2
Ім'я файлуВерсія файлуРозмір файлуДатаЧасПлатформа
Servicemonikersupport.dll3.0.4506.412019,28810-Jun-200906:56x64
System.runtime.serialization.dll3.0.4506.4120847,87210-Jun-200906:56x64
System.servicemodel.dll3.0.4506.41205,271,55210-Jun-200906:56x64
Відомості про файли для всіх на базі Itanium версій Windows Server 2008 SP2
Ім'я файлуВерсія файлуРозмір файлуДатаЧасПлатформа
Servicemonikersupport.dll3.0.4506.412033,64010-Jun-200906:56IA-64
System.runtime.serialization.dll3.0.4506.4120847,87210-Jun-200906:56IA-64
System.servicemodel.dll3.0.4506.41205,271,55210-Jun-200906:56IA-64

Стан


Корпорація Майкрософт підтвердила існування цієї неполадки у продуктах Майкрософт, перелічених у розділі "Застосовується до".

Додаткові відомості


Використовувати такий приклад коду для перевірки enableUnsecuredResponse атрибут:

Служба
BindingElementCollection serviceBec = new BindingElementCollection();
SecurityBindingElement serviceSbe = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
serviceSbe.EnableUnsecuredResponse = true;
serviceBec.Add(serviceSbe);
serviceBec.Add(new TextMessageEncodingBindingElement());
serviceBec.Add(new HttpTransportBindingElement());
Binding serviceBinding = new CustomBinding(serviceBec);

ServiceHost serviceHost = new ServiceHost(typeof(RequestReply));

serviceHost.Open();
Клієнт
BindingElementCollection clientBec = new BindingElementCollection();
SecurityBindingElement clientSbe = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
clientSbe.EnableUnsecuredResponse = true;
clientBec.Add(clientSbe);
clientBec.Add(new TextMessageEncodingBindingElement());
clientBec.Add(new HttpTransportBindingElement());
Binding clientBinding = new CustomBinding(clientBec);

IRequestReply channel = cf.CreateChannel();
try
{
channel.SendString("Hello");
cf.Close();
}