2010-04-28 5 views
7

Tôi đang chơi xung quanh với Dịch vụ dữ liệu WCF (ADO.NET Data Services). Tôi có một mô hình khung thực thể chỉ vào cơ sở dữ liệu AdventureWorks.Làm cách nào để lưu trữ đúng dịch vụ dữ liệu WCF kết nối với SQLServer trong IIS? Tại sao tôi gặp lỗi?

Khi tôi gỡ lỗi tệp svc của mình từ trong Visual Studio, nó hoạt động tốt. Tôi có thể nói /awservice.svc/Customers và lấy lại nguồn cấp dữ liệu ATOM mà tôi mong đợi.

Nếu tôi xuất bản dịch vụ (được lưu trữ trong ứng dụng web ASP.NET) tới IIS7, cùng một chuỗi truy vấn sẽ trả về lỗi 500. Trang gốc svc hoạt động như mong đợi và trả về thành công ATOM. Đường dẫn/Khách hàng không thành công.

Đây là những gì các khoản tài trợ của tôi trông giống như trong file svc:

public class AWService : DataService<AWEntities> 
{ 
    public static void InitializeService(DataServiceConfiguration config) 
    { 
     config.SetEntitySetAccessRule("*", EntitySetRights.All); 
     config.SetServiceOperationAccessRule("*", ServiceOperationRights.All); 
     config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; 
    } 
} 

Cập nhật: tôi kích hoạt lỗi verbose và nhận được như sau trong thông điệp XML:

<innererror> 
<message>The underlying provider failed on Open.</message> 
<type>System.Data.EntityException</type> 
<stacktrace> 
    at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(
... 
... 
<internalexception> 
<message> 
Login failed for user 'IIS APPPOOL\DefaultAppPool'. 
</message> 
<type>System.Data.SqlClient.SqlException</type> 
<stacktrace> 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ... 

Trả lời

8

Dường với tôi như thế này là một lỗi xác thực SQL, IIS đang chạy appPool của nó dưới một người dùng không có quyền truy cập vào máy chủ SQL của bạn, khi bạn hủy hoại trong Visual Studio (cục bộ) nó sẽ là một người dùng khác. Kiểm tra người dùng rằng IIS trên máy chủ đang sử dụng và đảm bảo rằng nó có quyền thực hiện những gì bạn muốn trong SQL.

+0

Tôi đang chạy cả IIS và SQLServer trên máy của mình. Tôi nghĩ * Tôi đang sử dụng Xác thực Windows trên cả hai. Tôi biết SQLServer chắc chắn. Bất kỳ cách nào tôi có thể kiểm tra IIS? –

+2

@Pharabus - Bạn là một thiên tài. Tôi đã phải sửa đổi tài khoản Identity được sử dụng bởi DefaultAppPool. Đây là một bài viết về cách thực hiện điều này: http://technet.microsoft.com/en-us/library/cc771170%28WS.10%29.aspx. Theo mặc định, nó đang sử dụng một tài khoản đặc quyền thấp. Đặt nó vào LocalSystem đã làm các trick. –

1

Cố gắng thay đổi kết nối chuỗi thuộc tính an ninh tích hợp để False

0

giải pháp nhanh với IIS nhanh

  1. Tạo một ngoại lệ tường lửa để cho phép các yêu cầu HTTP thông qua các bức tường lửa trên mà IIS Express đang sử dụng.

  2. Nhận địa chỉ IP của máy tính phát triển, nếu cần, bằng cách chạy ipconfig.

  3. Tìm tệp cấu hình IIS Express, applicationhost.config, trong thư mục% USERPROFILE% \ Documents \ IISExpress \ config. Biến môi trường USERPROFILE thường có giá trị C: \ Users \.

  4. Mở applicationhost.config bằng Notepad hoặc trình chỉnh sửa văn bản khác và thực hiện các thay đổi sau.

  5. Tìm phần tử trang web cho dịch vụ web, WebServiceForTesting. Nếu bạn không thấy phần tử trang web cho dịch vụ web, bạn phải triển khai dịch vụ ít nhất một lần để tạo phần tử.

  6. Trong phần kết buộc của phần tử trang web, sao chép phần tử liên kết và dán bản sao ngay bên dưới phần tử ràng buộc hiện có để tạo liên kết thứ hai. Trong phần tử ràng buộc mới, thay thế localhost bằng địa chỉ IP của máy tính. Lưu thay đổi.

  7. Chạy Visual Studio làm quản trị viên và mở giải pháp Visual Studio.

  8. Trong dự án ứng dụng dành cho điện thoại, hãy xóa tham chiếu dịch vụ sang dịch vụ nếu trước đó bạn đã thêm nó. Thêm tham chiếu dịch vụ mới vào dịch vụ web được định cấu hình lại. Trong hộp thoại Thêm dịch vụ tham khảo, trong hộp địa chỉ, thay thế localhost bằng địa chỉ IP của máy tính phát triển của bạn. Nhấp vào Tìm.

  9. Ràng buộc thứ hai cho dịch vụ trong dự án WCF được phát hiện và hiển thị. Nhấp vào OK.

  10. Tham chiếu dịch vụ mới sử dụng địa chỉ IP của máy tính phát triển được thêm vào dự án Windows Phone.

+0

Xin chào, chào mừng bạn đến với StackOverflow! Câu trả lời của bạn có vẻ tốt, nhưng nó sẽ dễ đọc hơn nếu bạn chia nó thành nhiều đoạn văn, hoặc thậm chí sử dụng danh sách đánh số/bản tin. – Benesh