2013-04-04 26 views
7

Trước khi bạn downvote, tôi biết có những câu hỏi trùng lặp như thế này, nhưng tôi đã cố gắng và không thành công trong việc tìm kiếm giải pháp chúng. Có thể tôi đã bỏ lỡ một cái gì đó, nhưng tôi vẫn còn tương đối mới để WCF vì vậy một số của nó đi qua đầu của tôi một chút.WCF - Đã xảy ra lỗi khi nhận phản hồi HTTP tới http: // xxxxx/Service/

Tôi đang thực hiện cuộc gọi này trong dịch vụ WCF của tôi:.

public User GetStudentRecord(string userName) 
    { 
     try 
     { 
      return new DashboardFacade().GetStudentRecord(userName); 
     } 
     catch (Exception ex) 
     { 
      ServiceFault fault = new ServiceFault(); 
      fault.Operation = "GetStudentRecord"; 
      fault.Reason = "Who knows..."; 
      fault.Message = ex.Message; 
      throw new FaultException<ServiceFault>(fault, fault.Message, new FaultCode(fault.Reason), fault.Operation); 
     } 
    } 

DashboardFacade() GetStudentRecord (..) được định nghĩa như thế này:

public User GetStudentRecord(string userName) 
{ 
    User user = ctx.Users.Where(x => x.ADUserName == userName).SingleOrDefault(); 
    return user; 
} 

ctx là DbContext tôi. Tôi đang sử dụng Mã khung thực thể đầu tiên. Đối tượng người dùng trông như thế này:

public class User 
{ 
    public User() 
    { 
     //UserDetails = new UserDetail(); 
    } 
    [Key] 
    public Guid MasterKey { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public string ADUserName { get; set; } 
    public string UserType { get; set; } 
    public virtual UserDetail UserDetails { get; set; } 
    public Nullable<DateTime> LastModifiedDate { get; set; } 
} 

Và cuối cùng, có lẽ bạn cần phải xem web.config về việc áp dụng WCF:

<?xml version="1.0"?> 
    <configuration> 
     <connectionStrings> 
     <add name="NotMyDBContextDB" connectionString="[omitted]" providerName="System.Data.SqlClient"/> 
     <add name="ApplicationContext" connectionString="Data Source=.;Initial Catalog=MyApp;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient"/> 
     </connectionStrings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"/> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/> 
    </system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
<directoryBrowse enabled="true"/> 
</system.webServer> 
</configuration> 

bất cứ ai có thể chỉ cho tôi đến nơi tôi sẽ sai ở đây?

Đây là lỗi chính xác Tôi nhận:

An error occurred while receiving the HTTP response to http://localhost:5843/MyService.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details. 

Inner Exception: 
The underlying connection was closed: An unexpected error occurred on a receive. 

Inner Exception: 
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. 

Inner Exception: 
An existing connection was forcibly closed by the remote host 
+0

Lỗi ở đâu được ném? Chạy dịch vụ của bạn trong trình gỡ lỗi. – dthorpe

+0

Chỉ cần thêm lỗi và các thông báo ngoại lệ bên trong mà tôi nhận được. Tôi có thể chạy nó trong trình gỡ lỗi và nó cho phép tôi bước qua tất cả các mã tôi có ở trên. Một khi tôi rời khỏi GetStudentRecord() gọi trong dịch vụ thực tế tôi nhận được lỗi một vài giây sau đó. – ledgeJumper

Trả lời

8

Tìm thấy nguyên nhân gốc rễ sau khi rất nhiều chửi thề và suy nghĩ về cách thoải mái các thời tiết ở bên ngoài. Tôi loại bỏ từ khóa ảo từ đối tượng UserDetails bên trong đối tượng User.

Bây giờ nó hoạt động!

Theo như lý do tại sao điều này gây ra vấn đề, giả định của tôi là vấn đề serialization hoặc DbContext, nhưng tôi sẽ phải xem xét kỹ hơn, không chắc chắn.

Tôi sẽ ra ngoài bây giờ.

Vì vậy, để tham khảo, nếu bạn lên vết thương ở đây và không có ý tưởng những gì đang xảy ra, trong số tất cả những điều khác mà bạn nên xem xét (kích thước, thời gian chờ, vv):

Check to see if your object has virtual keyword on it. 
+0

Mất một NGÀY NÀO để tôi tìm câu trả lời này. Cảm ơn bạn! –

+0

Bạn là một thiên thần. Tôi cũng đã lãng phí cả ngày về điều này. Cảm ơn bạn đã gợi ý. – stakx

0

Có ngoại trừ của bạn xảy ra khi bạn cố gắng truy cập vào một số lĩnh vực của đối tượng người dùng mà được trả lại?

Nếu có, có vẻ như đối tượng ctx của bạn đang bị dịch vụ của bạn đóng sau khi gọi tới GetStudentRecord(). Bạn tạo ctx ở đâu và bạn mở/đóng nó như thế nào?

(Do yêu cầu 50 đại diện tôi không thể đặt điều này trong một bình luận ... vì vậy đây là một câu trả lời thay vì)

+0

Ngữ cảnh đang được tạo trong lớp mà phương thức nằm bên trong. Nó nằm trong một thư viện lớp riêng biệt hơn bản thân dịch vụ wcf. Vì vậy, khi lớp khởi tạo ngữ cảnh được tạo ra. Tôi có hai phương pháp khác trong lớp DashboardFacade đang làm cơ bản cùng một điều, nhưng trả về một danh sách các đối tượng khác nhau, không phải đối tượng User. Vì vậy, tôi không biết rằng nó sẽ là bối cảnh liên quan. – ledgeJumper

+0

Tôi có cùng câu hỏi với _dthorpe_ ở trên: Trường hợp ngoại lệ được ném từ đâu? Bạn đang hạ cánh trong phần bắt của GetStudentRecord() hoặc là ngoại lệ đến từ một khu vực khác? – TomEddie

+0

Trường hợp ngoại lệ bị ném ở nơi khác, không phải trong bất kỳ mã nào tôi đã xem. Nó đã làm cho nó thông qua tất cả các phương pháp tôi đăng trên chỉ là tốt. – ledgeJumper

0

Không ai trong số các phương pháp đã làm cho tôi. Những gì tôi đã làm là để gỡ lỗi các dịch vụ trong khi chạy từ WCF Test Client và tôi đã có thể tìm thấy vấn đề của tôi. Nó đã được làm với thư viện dịch vụ thiếu chuỗi kết nối trong app.config.

Chỉ cần đăng nếu có ai đó đã thử tất cả các phương pháp khác và vẫn không thể tìm thấy sự cố.

1

Tôi đã gặp lỗi tương tự.

Trong trường hợp của tôi, tôi có một bảng có cột int được gọi là OEM. Trong lớp mô hình, tôi có một lớp (DTO) với cột đó được đại diện bởi một Enum. Có một hàng trong bảng có giá trị trong cột OEM không hợp lệ. Khi tôi cố gắng đưa tất cả dữ liệu bằng LINQ, đã xảy ra lỗi không được VisualStudio ghi lại. Lỗi đó được tăng lên khi WCF cố truy xuất thư.

4

Tôi đã gặp phải sự cố này và trong trường hợp của tôi, vấn đề là dịch vụ WCF đã trả về một lớp học có tài sản chỉ với người khởi động và không có người đặt cược. Tôi đã cố gắng để ngăn chặn các tài sản bị sửa đổi bởi người nhận. Để giải quyết vấn đề này, hãy xem điều này ...

WCF Services and Object Constructors

+0

Điều đó đã cứu tôi! Lỗi thực sự được gây ra bởi một tài sản chỉ đọc mà đã ném một ngoại lệ tham chiếu null ... Nhưng điều này đã được ẩn tất cả sâu xuống. WCF điên rồ! – Schalk

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