2012-11-30 22 views
6

Tôi biết giải pháp hầu hết sẽ gợi ý là thay đổi các thuộc tính của đối tượng của tôi từ TDateTime thành String, nhưng tôi không có quyền truy cập vào tất cả mã nguồn cho dịch vụ web ứng dụng, vì vậy có những trường hợp tôi không thể làm điều đó. Vì vậy, tôi chỉ muốn đảm bảo rằng tôi sẽ giải quyết vấn đề này. Một thời gian ngắn, tôi có một ứng dụng .NET MVC gọi một phương thức web của một ứng dụng dịch vụ được viết trong Delphi 2005 để có được một đối tượng cuộc hẹn, bao gồm ngày/giờ bắt đầu và ngày kết thúc/thời gian kết thúc. Người dùng có thể thay đổi cuộc hẹn, sau đó ứng dụng MVC gọi một phương thức web khác, chuyển qua đối tượng cuộc hẹn đã sửa đổi, để ứng dụng dịch vụ lưu trữ.dịch vụ web delphi nhận được datetime khác nhau từ ứng dụng .net mvc

Thuộc tính StartTime và EndTime của TAppointemnt được định nghĩa trong Delphi dưới dạng TDateTime. Chúng xuất hiện trong WSDL dưới dạng xs: dateTime. Visual Studio tạo chúng dưới dạng System.DateTime trong Reference.cs.

Bằng cách sử dụng Trình gỡ lỗi ứng dụng web trong Delphi và đặt thiết bị đầu cuối của ứng dụng MVC thành dịch vụ web EXE, tôi có thể duyệt qua cả hai ứng dụng trong thời gian thực. Những gì tôi thấy là các thuộc tính StartTime và EndTime của các đối tượng được gửi và nhận được chỉ định giống nhau khi được truyền từ dịch vụ web sang .NET MVC, nhưng thời gian được điều chỉnh 13 giờ khi truyền từ .NET MVC sang Delphi dịch vụ web.

Trong khi tôi hiểu .NET thực hiện một số điều chỉnh múi giờ nội bộ, chỉ nên rõ ràng khi máy khách và máy chủ ở các múi giờ khác nhau. Trong trường hợp của tôi, trình duyệt máy khách, ứng dụng .NET MVC và ứng dụng dịch vụ Delphi cũng giống như vậy. Trong thực tế, tất cả đều chạy trên cùng một máy, vì vậy tôi đang thua lỗ là tại sao sự khác biệt.

Nó trông giống như họ mã hóa các datetimes trong XML khác nhau ...

phản hồi từ ứng dụng dịch vụ Delphi để ứng dụng .NET MVC:

<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00.000+13:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00.000+13:00</EndTime> 

Các POST từ NET MVC ứng dụng ứng dụng dịch vụ Delphi:

<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00</EndTime> 
+0

13 vừa trở thành một con số độc ác hơn nữa. –

Trả lời

6

Tôi đã tìm được giải pháp phù hợp với mình.

Trong mô hình của mình, nơi tôi xử lý bản cập nhật cho cuộc hẹn, tôi đã chuyển đối tượng cuộc hẹn được tạo bởi thành phần chế độ xem, không bao gồm tất cả các thuộc tính. Chỉ những người trên màn hình. Để hoàn thành cuộc hẹn, tôi nhận được phiên bản không thay đổi từ ứng dụng dịch vụ và sửa đổi các thuộc tính của nó dựa trên đối tượng mới.

Những gì tôi tìm thấy khi gỡ lỗi là thuộc tính StartTime và EndTime của wsAppointment được truy xuất từ ​​ứng dụng dịch vụ có DateTimeKind của Local, trong khi StartTime và EndTime của tham số pAppointment được đặt thành Unspecified. Vì vậy, DateTimeKind địa phương mà tôi đã quay trở lại ứng dụng dịch vụ đã được ghi đè bằng Unspecified.

Để sửa lỗi này, tôi sử dụng DateTime.SpecifyKind để thiết lập một cách rõ ràng tài sản Kind, như sau:

wsAppointment.StartTime = DateTime.SpecifyKind(pAppointment.StartTime, DateTimeKind.Local); 
wsAppointment.EndTime = DateTime.SpecifyKind(pAppointment.EndTime, DateTimeKind.Local); 

Hope this helps ra những người khác đang gặp những vấn đề tương tự hoặc tương đương.

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