2012-11-07 31 views
6

Tôi đang chạy một ứng dụng ASP.Net trên Windows Server 2008 R2. Tôi đã cài đặt .NET Framework 4.5. Khi di chuyển từ .NET Framework v2.0 sang v4.0, tôi bắt đầu trải nghiệm hành vi ngẫu nhiên từ WCF.JSON không hợp lệ được trả lại ngẫu nhiên bởi WCF

Dịch vụ web của tôi trả về JSON. Khi khởi động lại IIS, dịch vụ sẽ trả về JSON hoàn toàn hợp lệ khoảng 3 đến 5 lần. Sau đó, JSON trở nên không hợp lệ. Tôi đã kiểm tra những gì đang đi qua dây thông qua Fiddler và cũng là bản ghi của riêng tôi trên cả ứng dụng khách (một ứng dụng Adobe AIR gọi dịch vụ) và trên chính máy chủ.

Fiddler cho thấy rằng phản hồi thô thực tế chứa JSON không hợp lệ. Nó xuất hiện rất nhiều rằng một số điểm ngẫu nhiên trong JSON phản ứng JSON bắt đầu được viết ra một lần nữa !, ghi đè lên những gì cần có và tạo ra JSON bị xáo trộn trong tiến trình.

Xem ví dụ nối này:

{"responseCode":0,"actionCode":"OK","cdn{"responseCode":0, "actionCode"..... 

Lưu ý như thế nào "responseCode" (mà chỉ nên xuất hiện ở phần đầu của phản ứng JSON) đột nhiên xuất hiện một lần nữa trong JSON thêm vào. "cdn{"responseCode":0 là khóa học không hợp lệ JSON.

Tôi đã thử nhiều bản vá. Tôi đã thử chạy ServiceModelReg.exeaspnet_regiis.exe từ dưới các khuôn khổ khác nhau và trong các kết hợp khác nhau. Hành vi tương tự. Nếu tôi trở lại mã trước theo v2.0 và chuyển App Pool trở lại v2.0 thì mọi thứ hoạt động tốt.

Tôi tin rằng đây là lỗi sâu trong WCF. Bất kỳ ý tưởng?

Truy vấn duy nhất tôi có vào thời điểm này là tách ra WCF và chuyển sang một cái gì đó như ServiceStack nơi tôi có thể gỡ lỗi vào tất cả các mã nếu cần thiết.

+1

Hình như một số loại vấn đề đệm, nơi một bộ đệm được truyền lại, hoặc trong trường hợp một bộ đệm không được xóa sau khi truyền/nhận. –

+4

Tôi không biết bất kỳ vấn đề hiện tại nào về vấn đề này. Nhưng sẽ rất hữu ích nếu bạn có thể đăng một đoạn mã repro. – Praburaj

+0

Bạn đã thử FailedRequestLogging để xem liệu có bất kỳ điều gì đáng chú ý trong quá trình này không? Bạn đã thử chạy các đối tượng trả về của mình thông qua JavaScriptSerializer() để xem có trục trặc trong đó không? Bạn có thể gỡ lỗi vào khung nếu bạn cần (xem: http://msdn.microsoft.com/en-us/library/cc667410.aspx). – Pete

Trả lời

1

Đã xảy ra sự cố tương tự. Tôi cố định này bằng cách loại bỏ những 2 mục từ web.config của tôi:

<system.serviceModel> 
    <diagnostics> 
     <messageLogging logEntireMessage="true" logMessagesAtTransportLevel="true" maxSizeOfMessageToLog="-1" maxMessagesToLog="-1" /> 
    </diagnostics> 
</system.serviceModel> 

<system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging"> 
      <listeners> 
       <add name="messages" type="MyCustomListener" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 
+0

Một số giải pháp và nhận xét ở trên có thể đã hoạt động. Tôi không biết. Giải pháp cuối cùng của tôi là từ bỏ WCF và sử dụng Service Stack. Cho đến nay tôi thấy nó là một kiến ​​trúc vượt trội để triển khai các dịch vụ web. –

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