2010-02-09 31 views
25

Bir üçüncü tarafın umarım tüketeceği bir hizmet oluşturmaya çalışıyorum.
Tüketici SOAP 1.1 ile uyumludur, bu yüzden sunucu için basicHttpBinding kullanıyorum. Gerçek istek yapıldığında, sunucu tarafından beklenen içerik türlerinde bir şeyler ters gitmektedir. BasicHttpBinding kullanarak neden hala benim uygulama için sadece SOAP 1.2 tarafından talep edilen sunucu 'application/soap + xml' beklemiyor anlamıyorum.

Bu ikisi hakkında ne iletişim kurduğunu anlamak için wireshark kullandım. Tcp akışına bakın ve aşağıdaki ayarları yapın.

Herhangi bir yardım için teşekkür ederiz.

WCF ve Sabun 1.1

3. parti uygulama isteği

POST/HTTP/1.1

SOAPAction: http://tempuri.org/ITestService/Hello

Content-Type: text/xml; charset = utf-8

Host: shdesktop: 8000

İçerik-Uzunluk: 297

Expect: 100-devam

Bağlantı: Kapat

WCF Sunucu yanıtı

HTTP/1.1 415 İçerik türü 'text/xml olduğu için iletisini işleyemiyor; charset = utf-8 ' beklenen tip' application/soap + xml değildi; charset = utf-8 '.

İçerik-Uzunluk: 0

Sunucu: Microsoft-HTTPAPI/2.0

Tarih: Sal, 9 Şubat 2010 14:03:19 GMT

Bağlantı: yakın

Servis yapılandırması

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService"> 
     <endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <endpoint address="TestService" binding="basicHttpBinding" 
      contract="ConsoleApplication1.ITestService" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="behTestService"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
Biz Metin içeren bir web hizmetindeki bir mesaj/hatayı alınca

cevap

19

basicHttpBinding, SOAP 1.1 kullanır - ancak bu durumda, application/soap+xml içerik türünüz olur.

İstemciniz text/xml gönderdiğinden - bir REST arabirimi bekledikleri olasılığı var mı? Bu WCF webHttpBinding tarafından ele alınacaktır.

MSDN WCF REST Developer Center numaralı telefondan WCF'de REST hakkında daha fazla bilgi edinin ve Pluralsight'a bakın. screencast series on WCF REST - şiddetle tavsiye!

+0

oh, SOAP 1.1 'application/soap + xml' kullanır mı? WebHttpBinding'i yarın test edeceğim, teşekkürler! Herhangi bir fark yaratırsa, basit bir asmx hizmeti oluşturduğumda çalıştığı gerçeğini biliyorum. –

+2

@Silas: "eski stil" ASP.NET web servisleri (ASMX) ** ve ** WCF basicHttpBinding kullanımı SOAP 1.1 - yani, tamam, gerçekten. Müşterinizin size bir SOAP isteği göndermesini veya yalnızca URL'nizi –

+0

URL'nize göndermeye çalışıp çalışmadığını kontrol etmelisiniz, bunun yerine http: // numaralı telefonu arayarak http: // /TestService 'yi aramam gerekiyordu. Benim için aptalca hata. Yine de yardım için teşekkürler! –

6

Genellikle:

content type 'text/xml' 

Bu web sunucusu beklenen xml yanıtının yerine bir hata sayfası döndürdü anlamına gelir.

3

Tam olarak aynı konuya sahiptim - tanım, bu türün 1.2 olduğunu, ancak içerik türü farklı olduğu için 1.1'i beklediğini söylüyordu.

... 
<endpoint address="" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services/fooService" /> 
     </baseAddresses> 
    </host> 
... 

için:

... 
<endpoint address="fooService" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services" /> 
     </baseAddresses> 
    </host> 
... 

wsdl Soap 1.1 bu sefer olarak maruz

Ben benim sunucu yapılandırması ayarlanır eğer bulundu.