2011-08-02 26 views
23

Tôi đang làm việc thông qua một số ví dụ WCF trong "Windows Communication Foundation 4 Step By Step". Ứng dụng kết quả của tôi chạy tốt miễn là dịch vụ được lưu trữ trong casini. Nó không thành công khi tôi triển khai dịch vụ cho IIS cục bộ. Khi triển khai vào IIS, tôi có thể duyệt đến trang svc trong IE. Điều đó hoạt động.Ngoại lệ khi triển khai vào IIS: Đăng nhập không thành công cho người dùng 'IIS APPPOOL DefaultAppPool'

Theo sách, trang 41, tài khoản nhóm ứng dụng cần phải là thành viên của vai trò db_owner trong cơ sở dữ liệu của tôi. Tác giả đề xuất, sau khi xác minh địa chỉ chính xác của dịch vụ (đã thực hiện điều đó), hãy kiểm tra các quyền của tài khoản nhóm ứng dụng.

Làm cách nào để xác minh tài khoản nào được sử dụng bởi nhóm ứng dụng lưu trữ dịch vụ WCF của tôi? Hiện đang sử dụng nhóm ứng dụng mặc định và IIS APPPOOL \ DefaultAppPool nằm trong vai trò db_owner. IIS APPPOOL \ ASP.NET v4.0 cũng nằm trong vai trò db_owner.

Trường hợp ngoại lệ là ...

System.Data.SqlClient.SqlException: Login failed for user 'IIS APPPOOL\DefaultAppPool'. 

Làm thế nào để khắc phục vấn đề này? Cảm ơn!

Trả lời

44

Giải pháp phát hiện here:

  • Mở IIS
  • nhấp đúp chuột vào tên máy tính của bạn dưới Connections
  • Bấm Application Pools
  • Chọn hồ bơi ứng dụng của bạn (DefaultAppPool)
  • Sau đó, dưới hành động trên nhấp chuột phải vào Cài đặt nâng cao,
    • Đi tới Proces s Phần mô hình và
    • nhấp vào Nhận dạng.
    • Bây giờ hãy chọn NetworkService.
+0

cảm ơn bạn rất nhiều vì giải pháp này nhưng xin bạn có thể mô tả về vấn đề này –

+3

Lựa chọn NetworkService không giúp tôi, giải quyết vấn đề cho tôi là chọn tùy chọn Tài khoản tùy chỉnh trong Nhận dạng và điền tên người dùng và mật khẩu máy của tôi . Cảm ơn cho hướng – ParPar

+1

Bây giờ nó bắt đầu cho lỗi: Đăng nhập thất bại cho người dùng 'WORKGROUP \\ máy $'. : ( –

1

Tôi cũng gặp vấn đề tương tự. Vấn đề là tôi đã có "IntegratedSecurity = True;" trong chuỗi kết nối của tôi nhưng tôi đã sử dụng xác thực sql và truyền thông tin đăng nhập cùng một lúc. Tôi đã loại bỏ phần tích hợp và mọi thứ đã hoạt động.

0
if not exists 
(select * from sys.server_principals where name='IIS APPPOOL\DefaultAppPool') 
    create login [IIS APPPOOL\DefaultAppPool] from windows; 
+2

Tránh chỉ trả lời mã khi họ không hữu ích cho người dùng trong tương lai – LcSalazar

0

Điều đầu tiên bạn cần xóa nếu bạn đang sử dụng cửa sổ xác thực và bạn không nhắc đến bất kỳ mật khẩu Tên truy nhập trong chuỗi kết nối của bạn sau đó:

gì xảy ra khi bạn chạy mã của bạn thông qua localhost: khi bạn chạy ứng dụng khách thử nghiệm wcf của bạn từ localhost, nó sẽ có thể giao tiếp với cơ sở dữ liệu như ứng dụng chế độ gỡ lỗi cục bộ đang gọi cơ sở dữ liệu bằng dịch vụ tài khoản của bạn. Vì vậy, nó có quyền truy cập vào cơ sở dữ liệu vì devenv.exe đang chạy trong tài khoản người dùng của bạn.

Nhưng khi bạn triển khai dịch vụ web của mình trong IIS. Bây giờ hãy hiểu dịch vụ này chạy dưới IIS không thuộc tài khoản của bạn. Vì vậy, bạn cần gán quyền truy cập vào dịch vụ IIS để truy cập máy chủ sql để xác thực cửa sổ. Tại đây, dịch vụ web của bạn sẽ không thể giao tiếp với máy chủ SQL vì vấn đề quyền truy cập.

Vì vậy, nếu bạn đang sử dụng xác thực cửa sổ để kết nối cơ sở dữ liệu của mình, bạn chỉ cần thay đổi cài đặt nhóm ứng dụng IIS. Bạn cần thay đổi danh tính của nhóm ứng dụng IIS thành Hệ thống cục bộ.

Dưới đây là những bước cho các cửa sổ xác thực WCF: • Mở IIS (cửa sổ + R (chạy) sau đó gõ inetmgr, sau đó nhấn ok) • nhấp đúp chuột vào tên máy tính của bạn dưới Connections Application Pools • Bấm • Chọn bạn hồ bơi ứng dụng (DefaultAppPool) • Sau đó, theo các thao tác trên nhấp chuột phải Cài đặt nâng cao: • Chuyển đến phần Mô hình xử lý và • nhấp vào Nhận dạng. • Bây giờ chọn LocalSystem.

Bây giờ, hãy mở studio quản lý máy chủ sql của bạn: mở chạy-> sau đó nhập ssms rồi nhấn ok trong ssms, đăng nhập bằng tài khoản xác thực cửa sổ của bạn. tab bảo mật mở mở rộng tab đăng nhập khi đó bạn sẽ có thể xem tài khoản của mình.

tính Bây giờ mở tài khoản của bạn đi đến userMapping sau đó chọn cơ sở dữ liệu bạn muốn kết nối sau đó kiểm tra các dịch vụ thành viên vai trò bạn muốn sử dụng cho các cơ sở dữ liệu được lựa chọn bấm ok.

thêm Trusted_Connection = True; thuộc tính trong chuỗi kết nối của bạn. Lưu nó & triển khai dịch vụ web. Khởi động lại nhóm ứng dụng.

bạn sẽ có thể kết nối cơ sở dữ liệu ngay bây giờ.

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