私はこの質問がここで何度も尋ねられたことを知っていますが、まだ答えは私に解決策を提供していません。助けてください、私は壁に頭を打ちつけています。
問題:1つのページ(Default.aspx)を持つ単純なASP.NETWebフォームアプリがあります。このページには、jQuery、JSON2、Rick StrahlのServiceProxy.js、および参照されている私のjavascriptファイル(timezone.js)があります。同じプロジェクトに、ServiceProxy(jQueryの.ajax POSTの便利なラッパー)を使用してtimezone.jsから呼び出すWCFサービスがあります。呼び出しは、DateTimeプロパティを持つオブジェクトを返す必要があります。異なるタイムゾーンの2台のクライアントマシンでテストしており、異なる結果が得られています。ホストされているアプリのスクリーンショットはIISです。
編集:StackOverflowが画像を投稿させていないようです。これがレンダリングされたテキストです...
GMTマシンで次のようになります:WCF呼び出しからjsによってレンダリングされた日付:Fri Sep 28 13:30:00 UTC + 0100 2012
東部標準時のマシンで取得:WCF呼び出しからjsによってレンダリングされた日付: Fri Sep 28 08:30:00 EDT 2012
両方のスクリーンショットの右側に表示されているように、WCF呼び出しの結果は異なります。
返送される日付を完全に制御したいのですが、サーバー上で文字列に変換し、JavaScriptで文字列を解析するのにこれほど近づいています。また、WCF対応のAjaxサービスへのPOSTを使用する必要があります。
Default.aspxの背後にあるコードは次のとおりです
public class DateContainerObject
{
public DateTime theDate { get; set; }
}
public static class DateMaker
{
public static DateContainerObject MakeDateObj()
{
DateContainerObject obj = new DateContainerObject();
DateTime origUTCDate = new DateTime(2012, 9, 28, 13, 30, 0);
DateTime newKindDate = DateTime.SpecifyKind(origUTCDate, DateTimeKind.Unspecified);
obj.theDate = newKindDate;
return obj;
}
}
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Literal1.Text = DateMaker.MakeDateObj().theDate.ToString();
}
}
WCFサービスコードは次のとおりです。
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TimeZoneService
{
[OperationContract]
public DateContainerObject GetDateObject()
{
return DateMaker.MakeDateObj();
}
}
これはtimezone.jsコードです:
$(関数(){
var dObj = {};
var proxy = new ServiceProxy("/TimeZoneService.svc/", { isWcf: true });
proxy.invoke("GetDateObject",
dObj,
function (result) {
$('#spanDateJSRender').text(result.theDate);
},
function (e) {
alert(e);
},
function () { },
false
);
});
DateTimeKindをすべての異なる値に指定しようとしましたが、正確な日付と時刻が得られません。DateTimeOffsetを使用してみましたが、同じ結果が得られます。この例を使用して、サーバー上で作成された正確な日時を取得してブラウザーでレンダリングするにはどうすればよいですか?ご協力いただきありがとうございます。