2012-11-30 14 views
6

ほとんどの場合、私のオブジェクトのプロパティをTDateTimeからStringに変更することをお勧めしますが、Webサービスのすべてのソースコードにアクセスすることはできません私はそれをすることができない場合があります。だから私はむしろ私が問題を世話することを確実にしたいと思います。デルファイのWebサービスは、.net mvcアプリケーションと異なるdatetimeを取得します

簡単に言えば、Delphi 2005で作成されたサービスアプリケーションのWebメソッドを呼び出して、開始日時と終了日時を含む予定オブジェクトを取得する.NET MVCアプリケーションがあります。ユーザーは予定を変更できます。その後、MVCアプリケーションは、修正された予定オブジェクトを渡して別のWebメソッドを呼び出し、サービスアプリケーションを保存します。

TAppointemntのStartTimeプロパティとEndTimeプロパティは、DelphiでTDateTimeとして定義されています。それらはWSDLにxs:dateTimeとして表示されます。 Visual StudioはReference.csにSystem.DateTimeとしてそれらを作成します。

DelphiでWeb App Debuggerを使用し、MVCアプリケーションのエンドポイントをWebサービスEXEに設定することで、両方のアプリケーションをリアルタイムで処理できます。私が見ているのは、Webサービスから.NET MVCに渡されたときに送信されたAppointmentオブジェクトのStartTimeプロパティとEndTimeプロパティが同じですが、.NET MVCからDelphiに渡すときに時間が13時間調整されるということですウェブサービス。

.NETはいくつかの内部タイムゾーン調整を行いますが、クライアントとサーバーが異なるタイムゾーンにある場合にのみ明らかにする必要があります。私の場合、クライアントブラウザ、.NET MVCアプリ、Delphiサービスアプリは同じものです。実際には、それらはすべて同じマシン上で実行されるため、私はなぜその違いが失われています。

彼らは違ったXMLでの日付時刻を符号化するようにそれは見えない...

.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> 

.NET MVCアプリからのPOSTデルファイサービスアプリへ:

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

13はさらに悪化しています。 –

答えて

6

私のために働く解決策が見つかりました。

私のモデルでは、予定の更新を処理する場所に、すべてのプロパティを含まないビューコンポーネントによって生成された予定オブジェクトが渡されています。ビュー上のもののみ。予定を完了するために、サービスアプリケーションから変更されていないバージョンを取得し、新しいオブジェクトに基づいてそのプロパティを変更します。

デバッグ時に見つけたのは、サービスアプリケーションから取得したwsAppointmentのStartTimeおよびEndTimeプロパティにDateTimeKindがLocalであり、pAppointmentパラメータのStartTimeおよびEndTimeがUnspecifiedに設定されていたことです。したがって、私がサービスアプリに渡していたLocal DateTimeKindがUnspecifiedで上書きされていました。この問題を解決するには

次のように、私は、明示的Kindプロパティを設定するためにDateTime.SpecifyKindを使用:

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

ホープこれは、同一または同様の問題を経験している他の人を助けます。

関連する問題