แก้ไข: ข้อยกเว้นที่ System.NotSupportedException จะเกิดเมื่อคุณเรียกใช้ IIS ที่โฮสต์บริการ WCF ที่ใช้ใบรับรองไคลเอ็นต์สำหรับการรับรองความถูกต้องของ SSL

นำไปใช้กับ: .NET Framework 3.5 Service Pack 1

อาการ


พิจารณาสถานการณ์สมมติต่อไปนี้:
  • คุณสร้างการบริการของ Windows สื่อสารพื้นฐาน (WCF) ที่โฮสต์ใน Internet Information Services (IIS)
  • คุณสามารถใช้คลาWebScriptEnablingBehaviorในบริการ WCF
  • คุณตั้งค่าคอนฟิกบริการ WCF จะใช้ใบรับรองไคลเอ็นต์สำหรับการรับรองความถูกต้องของ การรักษาความปลอดภัย Secure Sockets Layer (SSL) เมื่อต้องการทำเช่นนี้ คุณต้องตั้งค่าคุณสมบัติClientCredentialTypeในไฟล์ Web.config เป็นใบรับรอง
ในสถานการณ์สมมตินี้ เมื่อคุณเรียกใช้บริการ WCF ถูกเว้นเป็นSystem.NotSupportedExceptionและคุณได้รับข้อผิดพลาด ที่คล้ายกับต่อไปนี้:
การตั้งค่า SSL สำหรับบริการ 'ไม่มี' ไม่ตรงกับของ IIS 'Ssl, SslNegotiateCert, SslRequireCert, SslMapCert, Ssl128'

สาเหตุ


ปัญหานี้เกิดขึ้นเนื่องจากคุณสมบัติบางอย่างของอินสแตนซ์HttpTransportBindingElementไม่ได้ถูกคัดลอกไปปลายทางของพร็อกซี javascript ที่สร้างโดยอัตโนมัติ

การแก้ปัญหา


โปรแกรมแก้ไขด่วนจะพร้อมใช้งานได้ในขณะนี้จาก Microsoft อย่างไรก็ตาม มีจุดมุ่งหมายที่จะแก้ไขเฉพาะปัญหาที่บทความนี้อธิบายไว้เท่านั้น นำวิธีนี้ไปใช้กับระบบที่ประสบกับปัญหาที่เฉพาะเจาะจงเท่านั้น

หากต้องการแก้ไขปัญหานี้ ให้ติดต่อฝ่ายบริการสนับสนุนลูกค้าของ Microsoft เพื่อขอรับโปรแกรมแก้ไขด่วน สำหรับรายการทั้งหมดของหมายเลขโทรศัพท์บริการการสนับสนุนลูกค้าของ Microsoft และข้อมูลเกี่ยวกับค่าใช้จ่ายในการสนับสนุน โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft:หมายเหตุ ในกรณีพิเศษ ค่าบริการที่เรียกเก็บตามปกติเมื่อโทรติดต่อฝ่ายสนับสนุนอาจจะยกเลิกได้หาก Microsoft Support Professional ตัดสินว่าโปรแกรมปรับปรุงที่เฉพาะเจาะจงจะแก้ไขปัญหาของคุณได้ ค่าใช้จ่ายในการสนับสนุนตามปกติจะใช้กับคำถามและปัญหาในการสนับสนุนเพิ่มเติมซึ่งไม่สอดคล้องตามเกณฑ์สำหรับโปรแกรมปรับปรุงเฉพาะที่เกี่ยวข้อง

ข้อกำหนดเบื้องต้น

คุณต้องมีการ.NET Framework 3.5 Service Pack 1 (SP1 ติดตั้งไว้เพื่อใช้โปรแกรมแก้ไขด่วนนี้)

ข้อกำหนดการรีสตาร์ท

คุณไม่ต้องรีสตาร์ทเครื่องคอมพิวเตอร์หลังจากที่คุณติดตั้งโปรแกรมแก้ไขด่วน

ข้อมูลการแทนที่โปรแกรมแก้ไขด่วน

โปรแกรมแก้ไขด่วนนี้ไม่ได้แทนโปรแกรมแก้ไขด่วนอื่น ๆ
เวอร์ชันภาษาอังกฤษของโปรแกรมแก้ไขด่วนนี้มีแอตทริบิวต์ของแฟ้ม (หรือแอตทริบิวต์ของแฟ้มที่ใหม่กว่านี้) ซึ่งแสดงรายการไว้ในตารางต่อไปนี้ วันที่และเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการไว้ในรูปแบบเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ระบบจะแปลงข้อมูลนี้เป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ใช้แท็บ โซนเวลา ในรายการ วันที่และเวลา ในแผงควบคุม
รุ่นที่ใช้ x86 สำหรับเซิร์ฟเวอร์ Windows 2000, Windows Server 2003 และ Windows XP
ชื่อแฟ้มรุ่นของแฟ้มขนาดของแฟ้มวันที่เวลาแพลตฟอร์ม
System.servicemodel.web.dll3.5.594.4152569,34422-Jul-200901:51x86

รุ่นที่ใช้ x64 สำหรับเซิร์ฟเวอร์ Windows 2000, Windows Server 2003 และ Windows XP
ชื่อแฟ้มรุ่นของแฟ้มขนาดของแฟ้มวันที่เวลาแพลตฟอร์ม
System.servicemodel.web.dll3.5.594.4152491,52022-Jul-200902:13x64

รุ่นที่ใช้ Itanium สำหรับเซิร์ฟเวอร์ Windows 2000, Windows Server 2003 และ Windows XP
ชื่อแฟ้มรุ่นของแฟ้มขนาดของแฟ้มวันที่เวลาแพลตฟอร์ม
System.servicemodel.web.dll3.5.594.4152491,52022-Jul-200902:26IA-64

สถานะ


Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

วิธีแก้ปัญหา


เมื่อต้องการหลีกเลี่ยงปัญหานี้ ให้โฮสต์บริการ WCF เองแทนการโฮสต์บริการใน IIS

ข้อมูลเพิ่มเติม


ข้อมูลการถ่ายโอนข้อมูลกองซ้อน

System.ServiceModel.dll!System.ServiceModel.Channels.HttpsChannelListener.ApplyHostedContext(System.ServiceModel.Activation.VirtualPathExtension virtualPathExtension, bool isMetadataListener) + 0x1b7 bytes    

System.ServiceModel.dll!System.ServiceModel.Channels.HttpsTransportBindingElement.BuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x69 bytes

System.ServiceModel.dll!System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener<System.__Canon>() + 0x5f bytes

System.ServiceModel.dll!System.ServiceModel.Channels.MessageEncodingBindingElement.InternalBuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x66 bytes

System.ServiceModel.Web.dll!System.ServiceModel.Channels.WebScriptMetadataMessageEncodingBindingElement.BuildChannelListener<System.__Canon>(System.ServiceModel.Channels.BindingContext context) + 0x4b bytes

System.ServiceModel.dll!System.ServiceModel.Channels.BindingContext.BuildInnerChannelListener<System.__Canon>() + 0x5f bytes

System.ServiceModel.dll!System.ServiceModel.Channels.Binding.BuildChannelListener<System.__Canon>(System.Uri listenUriBaseAddress, string listenUriRelativeAddress, System.ServiceModel.Description.ListenUriMode listenUriMode, System.ServiceModel.Channels.BindingParameterCollection parameters) + 0xa6 bytes

System.ServiceModel.dll!System.ServiceModel.Channels.Binding.BuildChannelListener<System.__Canon>(System.Uri listenUriBaseAddress, System.ServiceModel.Channels.BindingParameterCollection parameters) + 0x7c bytes

System.ServiceModel.Web.dll!System.ServiceModel.Description.WebScriptEnablingBehavior.AddMetadataEndpoint(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher, bool debugMode) + 0x698 bytes

System.ServiceModel.Web.dll!System.ServiceModel.Description.WebScriptEnablingBehavior.ApplyDispatchBehavior(System.ServiceModel.Description.ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher) + 0x60 bytes