Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 26959|Yanıt: 0

[Kaynak] C# web servis sunucusuna yapılan Java çağrıları HTTP başlığı SOAPAction'ın değerini tanımamaktadır

[Bağlantıyı kopyala]
2021-3-4 13:19:39 tarihinde yayınlandı | | | |
Neden C# çağıran web servisi raporlama sunucusu http başlığı SOAPAction'ın değerini tanımıyor ve C# sadece bir etiket eklemesi gerektiği için her zaman C#'ın değiştirmesine izin veriyor, neden JAVA bir eylem talebi belirtemiyor?



Webservice'i yayınlamak ve çağırmak çok basittir, ancak hâlâ küçük sorunlar vardır ve bunlar şu şekilde özetlenmiştir:

Java, .net'in webService'ini "Server HTTP başlığının değerini tanımadı" hatasıyla çağırıyor.

Çözüm:

Webservice çağrıldığında SoapAction belirtilmez, RequestNameSpace belirtilmez, bu yüzden "Sunucu HTTP başlığının değerini tanıyamadı" her zaman istenirken görünür.

Eksen çağrıları kullanılıyorsa, bunları aşağıdaki gibi çağırın:


public static void main(String[] args) throws Exception {  
    Getirmemek mi? WSDL eki
    String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Bir hizmet çağrısı oluştur     
  Hizmet hizmeti = yeni hizmet();
  Hizmet aracılığıyla bir çağrı nesnesi oluşturun
  Çağrı = (Ara) service.createCall();   
  Hizmetin bulunduğu URL'yi ayarlayın   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline, ağ tarafında "http://WebXml.com.cn/" yöntemidir; aynı zamanda Namespace'in adresine de dikkat eder ve getirmezseniz hata bildirir
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode aynı zamanda .NET yönteminin parametre adıdır ve qqCheckOnline'ın parametre adıdır
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Java'nın .net'in webService'ini "Sunucu HTTP başlığının değerini tanımadı" hatasıyla aramasını önlemek için
  call.setUseSOAPAction(doğru);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Geri dönen parametre türü
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Ayrıca, çağrılacak yöntemi eklemeniz gerektiği de belirtilmelidir, aksi takdirde bir hata da bildirilir
  Nesne dizileri parametreleri kapsüller     
  String ret = (Diz) call.invoke(yeni Nesne[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Yorumlar bölümüne dikkat edin.

Bağlantı girişi görünür.? WSDL, Kamu Web Hizmeti anlamına gelir

Aşağıdaki istisna, CXF kullanan wsdl2java.bat bir wsdl dosyasına dayalı .net web servisi yayınlamak için bir istemci oluşturduğunda ortaya çıkar


(tanımlanmamış eleman bildirimi 's:schema')

Çözüm:

wsdl.xml aç ve kullan


<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any />
Bu wsdl2java üretim hatası, JAXB'nin xml referanslarını desteklememesiyle ilgili olmalıdır, çünkü <s:any minOccurs="2" maxOccurs="2"/> ve <s:element ref="s:schema" /><s:any/> aslında eşdeğerdir. <s:element ref="s:schema" /> aslında burada s:schema tarafından belirtilen herhangi bir eleman türünü kullanabileceğiniz anlamına gelir, <s:any /> bu rolü üstlenir, <s:any minOccurs="2" maxOccurs="2"/> sadece iki <s:any />

Sadece tek bir cümleyle yazılmıştı.

referansBağlantı girişi görünür.

CXF'nin wsdl2java.bat kullanılarak wsdl dosyasına dayalı bir istemci derleme süper hatası oluşturulur

Çözüm:

Doğru derlenemez çünkü jax-ws2.2 spesifikasyonu java6 ile çelişmektedir.

Ancak program yalnızca java5'te derlenemez, bu yüzden jax-ws spesifikasyon sürümünü aşağılamak gerekir; bu sürüm şu şekilde işlenilebilir: Komutu çalıştır

WSDL2java -frontend jaxws21 -client *.xml

Bu şekilde, jax-ws2.1 ile oluşturulan kod java6'da derlenip çalıştırılabilir.

Aracın oluşturduğu istemci kodunu metin karşılaştırmasıyla karşılaştırdım ve metin karşılaştırmasının 3 daha istemci kodu oluşturduğunu gördüm, bu yüzden hata bildiren 3 üreticiyi çıkarmak yukarıdaki sorunları da çözebilir.

Yeniden basılmıştır:Bağlantı girişi görünür.




Önceki:.NET/C#, kod performansını test etmek için BenchmarkDotNet kullanır
Önümüzdeki:Consul HTTP API arayüz çağrısı
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com