2009-02-22 32 views
11

Tôi gặp sự cố khi sử dụng WebServiceHostFactory trong IIS.Xác thực WebServiceHostFactory và IIS

"Chương trình xác thực IIS được xác định" IntegratedWindowsAuthentication, Anonymous ', nhưng ràng buộc chỉ hỗ trợ đặc tả của chính xác một lược đồ xác thực. Các phương thức xác thực hợp lệ là Digest, Negotiate, NTLM, Basic hoặc Anonymous. Thay đổi cài đặt IIS để chỉ lược đồ xác thực đơn được sử dụng. "

I wanted to keep both authentication schemes and managed to do so by not using the factory but setting up the endpoint manualy in web.config.

Câu hỏi của tôi là những gì đang WebServiceHostFactory làm để có được kết quả này? Tôi đã theo ấn tượng rằng WebServiceHostFactory sẽ thiết lập các ràng buộc để cùng một webHttpBinding mà tôi được sử dụng trong cấu hình của tôi.

Chỉnh sửa: Tôi đã xem xét WebServiceHostFactory trong phản xạ và không hoạt động thông minh. Nó chỉ là một nhà máy đơn giản cho WebServiceHost.

IIS vẫn sử dụng máy chủ dịch vụ nếu bạn thiết lập điểm cuối trong cấu hình? Hoặc là WebServiceHost thiết lập mọi thứ khác nhau.

Trả lời

3

Đây là những gì phù hợp với tôi. Thêm sớm điểm cuối giả (trước khi máy chủ dịch vụ được mở) như được hiển thị bên dưới dường như đã thực hiện thủ thuật. (Bài viết MSDN này ám chỉ http://msdn.microsoft.com/en-us/library/bb412178.aspx này.)

public class MyWebServiceHost : WebServiceHost 
{ 
    public MyWebServiceHost (Type serviceType, params Uri[] baseAddresses) : base(serviceType, baseAddresses) 
    { 
     // Inserting this dummy endpoint config seemingly does the trick: 
     AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), string.Empty); 
    } 

    protected override void ApplyConfiguration() 
    { 
     // Typical programmatic configuration here per: 
     // http://msdn.microsoft.com/en-us/library/aa395224.aspx 
    } 
} 

Tôi đoán này ngăn WebServiceHost từ việc tạo ra một thiết bị đầu cuối mặc định, và do đó đóng cửa một loạt các chức năng.

+0

Tôi không thể kiểm tra câu trả lời này vì điều này đã được hỏi một lúc trước và tôi đã làm việc xung quanh vấn đề rồi nhận được một công việc mới nhưng nếu bạn nói nó hoạt động thì đó là đủ tốt cho tôi. –

+0

Tôi không hiểu nơi tôi nên tham khảo MyWebServiceHost – JDC

+0

Tôi đã có cùng một vấn đề và tôi đã có thể làm cho nó hoạt động. Tôi đã phải viết hai lớp: 'MyWebServiceHostFactory' và' MyWebServiceHost'. Trong lớp nhà máy, tôi đã overrode phương thức 'ServiceHost CreateServiceHost (Type serviceType, Uri [] baseAddresses)' và nó trả về một cá thể 'MyWebServiceHost'. 'MyWebServiceHost' trông giống như một trong câu trả lời này, nhưng tôi đã không ghi đè' ApplyConfiguration() '. –

1

Tôi không chắc về WebServiceHostFactory, nhưng có vẻ như bạn đang lưu trữ dịch vụ bên trong IIS và nó có nhiều phương thức xác thực được chọn. Nếu bạn đã có IIS 5 hoặc 6, hãy thử đi vào IIS và xem các thuộc tính cho trang web hoặc thư mục ảo chứa dịch vụ của bạn. Đi đến tab Bảo mật thư mục, nhấp vào nút Chỉnh sửa trong "Truy cập ẩn danh và kiểm soát xác thực", sau đó bỏ chọn "Truy cập ẩn danh" hoặc "Xác thực Windows tích hợp". Tôi không chắc chắn về IIS7.

+1

Vấn đề với điều đó là bạn sau đó ** không thể gỡ lỗi một truy cập nặc danh ** trang web. Một ** không đạt yêu cầu ** làm việc xung quanh là biên dịch với một xác thực duy nhất sau đó ngay trước khi bạn gỡ lỗi chuyển đổi một trong những khác, trong IIS. Điều này làm việc nhưng là thời gian lãng phí và gây phiền nhiễu. Tôi đã nhìn thấy các trang web .NET 3.5 được phát triển trong nhiều năm mà không có sự cố này xảy ra. Với .NET 4 trang web, kinh nghiệm của tôi đã tồi tệ hơn. _ (Có khả năng thay đổi xác thực trang web từ tệp MSBuild, nhưng tôi không thể tìm thấy tác vụ đã sẵn sàng để làm điều đó.) _ –

+0

đã thực hiện mẹo đó cho tôi, tìm kiếm tuyệt vời! – Adi

+1

Xin lỗi nhưng được cho là anh ấy muốn giữ cả hai lược đồ xác thực ... Câu trả lời của bạn không hữu ích trong vấn đề đó. – LDAdams

1

Dưới IIS7 bạn có thể không tìm thấy nơi bạn có thể quản lý cài đặt Xác thực Windows tích hợp. Để xem cài đặt trong giao diện quản lý IIS7, bạn cần thực hiện theo các bước được mô tả trong bài viết sau: http://msdn.microsoft.com/en-us/library/x8a5axew.aspx (có tiêu đề là "Lỗi: Gỡ lỗi không thành công vì tính năng Xác thực Windows tích hợp không được bật", nếu liên kết không hoạt động).

Hy vọng điều đó sẽ hữu ích.

-1

an ninh vô hiệu hóa trong web.config-> tag cấu hình

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="None"> 
      <transport clientCredentialType="Windows"/> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 

sau đó dịch vụ WCF của bạn không cần xác thực ...

+0

Đây chỉ là một số mã ... vui lòng cung cấp một số giải thích. Nó không phải là câu trả lời cho câu hỏi. –

+0

Bạn thực sự cần cung cấp một số hình thức giải thích (chứ không chỉ là mẫu mã) khi cung cấp câu trả lời. –

Các vấn đề liên quan