PHP, C # web hizmeti yanlış bir tarih alma ile sorun

2 Cevap

Tamam bu yaklaşık 12 saat boyunca şimdi beni delirtiyor olmuştur. IIS 7 altında çalışan bir C # web hizmeti var ve ben bir Apache 2.2 kutusunda PHP ile buna bağlıyorum. Bunun herhangi gerçekten meselesi ama anladım gerektiğini onu içeri düşeceği değil

Şimdi web hizmeti doğrudan gitmek ve onu çağırdığınızda ben doğru datetime biçimi olsun ama ben php onu ararsanız bilmiyorum.

Example:

C # WebService: 6/4/2009 09:23:25

PHP Sabun Sonuç: 1600/12/31 16:00:00


The WebService is assessing WMI::Win32_LogonSession to get the StartTime and then being converted via ManagementDateTimeConverter.ToDateTime((string)wmisearcherData["StartTime"]) and then set to a string.

Herkes sunabileceği bir şey kaybetmek Im büyük bir yardım olacaktır.

Teşekkürler

2 Cevap

Ben yanlış bir zaman oluyor sanmıyorum. PHP "hiçbir zaman" oluyor, ve gördüğünüz zaman değeri varsayılan bir değerdir. Dönemin başlangıcı, dedikleri gibi. Ne olursa olsun göndermek ne değer, her zaman aynı zaman olacaktır. Tel gönderilen XML formatı PHP müşterinin beklentileri ile uyumlu değilse, bu olur. Aslında bu interoperating platformlarından herhangi bir çift, sadece C # ve PHP ile geçerlidir.

Eğer bir web hizmeti proxy kitaplığını kullandığınızda, kod örtülü Gelen ve giden XML belgeleri (ya da daha doğrusu, XML parçaları) için değişkenler ve dışarı eşler. Bazen açıkça XML Serialization yapmak apps, ancak web hizmetleri yığınları örtük bunu.

XML de-serileştirme istemci tarafında başarısız olur nedenleri çeşitli vardır. Benim durumumda, en yaygın nedeni basit bir XML ad uyuşmazlığı olduğunu. Istemci ve sunucu arasında bir ad tek bir eğik çizgi farkı XML aynı olmadığı anlamına gelir. Ben böyle bir XML de-serileştirme sorunu ile gün için savaşan bir müşteri yardım ettikten. Birisi masum estetik nedenlerle kapalı kesilmiş vardı - onun sunucusundan bir ad bir çizgi eksik çıkıyor.

Kenara XML öğesi ad ve ad alanı uyumsuzluklar, Tarih ve saat biçimleri web hizmetleri çalışabilirlik sorunları bilinen kaynağıdır. Bir süre biçimlendirmek için bir çok yolu vardır, çünkü budur. 2006-Haziran-14 2006/06/14 olarak aynı mı? 2007/04/07 Temmuz 4th veya Nisan 7. anlamına mı geliyor? Sadece biçimlendirme sorunları ötesinde, zaman değerinin göreli anlamda kendinizi endişe var. Bu UTC mi? Localtime? Yerel ise, nasıl dilimi değerini gösterir mi?

If anyone else has this problem, here's something you can do to help sort it:
set a debugging http proxy up between the service and the client. Like Fiddler2, or Charles, or Burp or proxyTrace. That way you can inspect the XML on the wire, which will help you figure out why the PHP app is not getting the result you desire.

Ben bu birlikte çalışma hatalar olması çoğu zaman, ben homojen bir istemci ve sunucu kullanarak sahte bir servis kurmak olacaktır. Senin durumunda bu bir PHP sunucusuna konuşurken bir PHP istemci olacaktır. Hata ayıklama proxy kullanarak, PHP istemci tarafından doğru kabul edilen PHP sunucu tarafından oluşturulan trafik bakmak. Başka bir hizmet olduğunu çoğaltmak gerekir. Daha sonra gerçek hizmetler tarafından teslim içerik PHP bekliyor ne ile uyumlu olduğunu doğrulamak için proxy kullanabilirsiniz.

Bu deneyin:

ManagementDateTimeConverter.ToDateTime((string)wmisearcherData["StartTime"]).ToString("yyyy/MM/dd HH:mm:ss")

PHP doğru şekilde yorumlamak gerekir.