简介
Windows 通讯基础 (WCF) 没有要发送安全的邮件,然后接收不安全的响应,或以不安全的邮件发送和接收安全的响应的功能。在本文中介绍的修复程序添加一个新的enableUnsecuredResponse属性。EnableUnsecuredResponse属性的默认值为false。如果此属性的值设置为true时,WCF 中启用了下列新功能︰
-
即使受待发邮件使用安全套接字层 (SSL) 协议签署的消息正文,WCF 客户端可以接受不安全的响应。
-
WCF 服务可以发送 SOAP 信封中有没有安全标头,即使请求安全的不安全的响应。
注意:EnableUnsecuredResponse属性仅适用于CustomBinding类型。
解决方案
如果您使用.NET Framework 3.0,以下基于 Microsoft 知识库文章中安装的修复程序描述︰
967105解决︰ 使 WCF 安全的邮件发送和接收一个修补程序进行不安全的响应,并将不安全的邮件发送和接收安全的响应,可用于.NET Framework 3.0如果使用的 Windows 7 或 Windows Server 2008 R2 上的.NET Framework 3.5 Service Pack 1,以下基于 Microsoft 知识库文章中安装的修复程序描述︰
977420修补程序汇总包可在窗口通信基础.NET Framework 3.5 SP1 的 Windows 7 中,为 Windows Server 2008 R2 中修复的问题 如果在其他操作系统上使用.NET Framework 3.5 Service Pack 1,安装以下修补程序来解决此问题。 受支持的修补程序现已从 Microsoft 推出。但是,它被用于纠正本文中描述的问题。它仅应用于正经历此特定问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个 service pack。 要立即解决此问题,请联系 Microsoft 客户支持服务,以获取此修复程序。Microsoft 客户支持服务的电话号码以及有关支持费用的信息的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support注意:在特殊情况下,如果 Microsoft 支持专业人员确定某个特定的更新能够解决您的问题,可能取消的通常情况下收取的电话支持服务费用。照常收取支持费用将应用于其他支持问题和对于特定更新无法解决的问题。
系统必备组件
要应用此修补程序,您必须具有.NET Framework 3.5 Service Pack 1。
重启要求
不需要重新启动计算机,如果正在使用.NET Framework 的实例不在应用此修补程序后。
修补程序替换信息
此修补程序不替换任何其他修补程序。
文件信息
此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。
对于所有基于 x86 版本的文件信息的 Windows Server 2003 和 Windows XP 中的
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
Servicemonikersupport.dll |
3.0.4506.4119 |
17,240 |
2009 年 06 月 01- |
22:56 |
x86 |
System.runtime.serialization.dll |
3.0.4506.4119 |
970,752 |
2009 年 06 月 01- |
22:56 |
x86 |
System.servicemodel.dll |
3.0.4506.4119 |
5,931,008 |
2009 年 06 月 01- |
22:56 |
x86 |
文件信息对于所有基于 x64 版本的 Windows Server 2003 和 Windows XP 中的
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
Servicemonikersupport.dll |
3.0.4506.4119 |
19,304 |
2009 年 06 月 01- |
22:28 |
x64 |
System.runtime.serialization.dll |
3.0.4506.4119 |
847,872 |
2009 年 06 月 01- |
22:28 |
x64 |
System.servicemodel.dll |
3.0.4506.4119 |
5,267,456 |
2009 年 06 月 01- |
22:28 |
x64 |
对于所有基于 x86 版本的文件信息和 Windows Server 2008 SP2 的 Windows Vista SP2
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
---|---|---|---|---|
Servicemonikersupport.dll |
3.0.4506.4120 |
17,240 |
10-Jun-2009 |
06:55 |
System.runtime.serialization.dll |
3.0.4506.4120 |
970,752 |
10-Jun-2009 |
06:55 |
System.servicemodel.dll |
3.0.4506.4120 |
5,935,104 |
10-Jun-2009 |
06:55 |
对于所有基于 x64 版本的文件信息和 Windows Server 2008 SP2 的 Windows Vista SP2
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
Servicemonikersupport.dll |
3.0.4506.4120 |
19,288 |
10-Jun-2009 |
06:56 |
x64 |
System.runtime.serialization.dll |
3.0.4506.4120 |
847,872 |
10-Jun-2009 |
06:56 |
x64 |
System.servicemodel.dll |
3.0.4506.4120 |
5,271,552 |
10-Jun-2009 |
06:56 |
x64 |
对于基于 Itanium 的所有版本的 Windows Server 2008 SP2 文件信息
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
Servicemonikersupport.dll |
3.0.4506.4120 |
33,640 |
10-Jun-2009 |
06:56 |
IA-64 |
System.runtime.serialization.dll |
3.0.4506.4120 |
847,872 |
10-Jun-2009 |
06:56 |
IA-64 |
System.servicemodel.dll |
3.0.4506.4120 |
5,271,552 |
10-Jun-2009 |
06:56 |
IA-64 |
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
详细信息
使用下面的代码示例测试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(); }