2016-11-14 24 views
8

C# uygulamasından web hizmetini çağırmak çalışıyorum ama istisna alıyorum:System.Web.Services.Protocols.SoapHttpClientProtocol.invoke (Windows Mobile'dan) hata ayıklama/izleme nasıl yapılır?

InvalidOperationException 
client found response content type of 'text/html; charset=utf-8', but expected 'text/xml' 

nasıl istek ve cevaplanması, mesajlar un URL görebilir? Hizmetim Masaüstünde çalışır, ancak istemci Windows Mobile CE 6.x'te çalışır, mobil aygıt USB kullanarak Dektop'a bağlanır. Probabily bu yüzden Wireshark veya Fiddler'da HTTP trafiğini görmemin sebebi (her ikisini de denedim). Servis çalışır - Postman kullanarak kontrol edebilirim (yöntem doğru ve anlamlı sonuç XML döndürür).

+0

Html döndüren bir web hizmetinin bir hata olduğu ve dolayısıyla sunucu yanıtının xml yerine bir hata sayfası olduğu anlamına gelebilir. Sunucuda ne olduğunu kaydedebilirseniz yardımcı olabilir. – derloopkat

+0

Belki de dev-makinenizi Fiddler'ın kullanımını sağlamak için mobil cihaz için bir proxy olarak kullanabilirsiniz? – martennis

cevap

3

Tamam, bu çok tuhaf geliyor, ancak IIS içinde Varsayılan Belge kullanıyor musunuz? Muhtemelen 'un olması gerekmediğini biliyorum, ancak web servisimin sitesi için varsayılan bir belge oluşturduğumda ve ServiceReference'ı kısaltılmış adrese yönlendirdiğimde, sadece yerel olarak çalıştırabiliyordum. Aksi takdirde, aynı "XML yerine Html" hatası alırdım.

benim durumumda düzeltme artık hizmet referansta kısaltılmış URL bakın ve tam URL'yi yazın dışarı idi

(site için varsayılan belge özelliğini kullanmayan, nam.)

+0

Bence asıl soru SOAP mesajlarının içeri ve dışarı yazdırılmasıdır. Umarım cevabınız da yardımcı olur! – morhook

+0

Evet - bu adamın kök sorununu çözmeye yardımcı olmaya çalıştığınız için utanıyorum.Bu, muhtemelen sorusuna bir yorum olarak yapmış olmalısınız. – STLDeveloper

+2

Eh, yaptığım şeyi önermemin bir nedeni var. Sorusu * bir sorunun hatalarını ayıklamakla ilgiliydi ... ama benim yorumum onun sorunu için bir düzeltme yapabilmekti (bu da bazı hata ayıklama zamanından tasarruf etmesine neden olabilirdi.) Ben koştuğumda neredeyse bir günlük gelişim süresinin beni düşürdüğünü biliyorum. Bunun karşısında - ve dediğim gibi, son derece benzer durumlarda aldığım aynı hata mesajı (yerel olarak çalıştım, Servis Referansı almak/güncellemek için yerel olmayan şekilde çalıştı, ancak aslında çalışırken yerel olarak çalışmadı.) Ehn - Eğer ona yardım etmezse, gelecekte başkalarına yardım edeceği için iyi bir şans var. :-) – Kevin

4

Sen açabilirsiniz HTTP çağrılarını dahili olarak yapan bazı kütüphanelerdeki hata ayıklamada (benim durumumda, bunlar HTTPS'dir, bu yüzden wireshark yoluyla inceleme imkansızdır).

listenize app.config eklemek gerekir:

<system.diagnostics> 
    <trace autoflush="true"/> 
    <sources> 
     <source name="System.Net" tracemode="protocolonly" maxdatasize="1024"> 
     <listeners> 
      <add name="TraceFile"/> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="trace.log"/> 
    </sharedListeners> 
    <switches> 
     <add name="System.Net" value="Verbose"/> 
    </switches> 
</system.diagnostics> 

Bu trace.log nerede exe çalışır ekleyecektir. Hizmetinizin nerede çalıştığını bilmiyorsanız, göreceli olmayan bir yol yerleştirebilmeniz gerekir. çıkış penceresinin (değil çıktı konsolu) içinde, Visual Studio içindeki kod çalıştırırken

Ayrıca, bu aynı günlükleri ekler. Sadece açılış ve (benim durumumda HTTPS'de) bağlantı kapatılıyor ilgili istek başlıklarını ve yanıtları ve bilgiler gerekiyorsa "Bilgi" için günlük düzeyini değiştirebilir .:

P.S..

2

bir SOAP istemci hata ayıklamak için en kolay ve en iyi yolu ve bir Web hizmeti veya Web hizmeti istemciden gönderilen SOAP mesajları kaydeder bir SOAP uzantısı oluşturmaktır. Daha kısa MSDN makalesine Efficient Tracing Using SOAP Extensions in .NET

Ve burada:

codeproject düzgün bunun nasıl iyi bir öğretici vardır How to: Implement a SOAP Extension

XML Spy SOAP Debugger veya benzeri para değer ticari SABUN Debugger'lar dışarı da vardır Doğrulama ve çağırma yapan SOAPSonar.

BTW: Eğer PHP kullanırsınız veya Java temelde aynı yaklaşımı kullanmak istiyorsanız.

İlgili konular