2010-02-09 21 views
25

मैं ऐसी सेवा बनाने की कोशिश कर रहा हूं जिसकी तीसरी पार्टी को उम्मीद है कि उपभोग करना चाहिए।
उपभोक्ता SOAP 1.1 के साथ संगत है, इसलिए मैं सर्वर के लिए basicHttp बाइंडिंग का उपयोग कर रहा हूं। जब वास्तविक अनुरोध किया जाता है, तो सर्वर द्वारा अपेक्षित सामग्री प्रकारों में कुछ गलत लगता है। BasicHttp बाइंडिंग का उपयोग करके मुझे नहीं पता कि सर्वर अभी भी 'एप्लिकेशन/साबुन + एक्सएमएल' की अपेक्षा करता है, जो मेरे ज्ञान के लिए केवल एसओएपी 1.2 द्वारा आवश्यक है।

मैंने वायरसहार्क का उपयोग यह पता लगाने के लिए किया है कि वास्तव में उन दोनों के बारे में क्या संचार कर रहे थे। नीचे टीसीपी स्ट्रीम और सेटअप देखें।

किसी भी मदद की सराहना की जाती है।

डब्ल्यूसीएफ और साबुन 1.1

3 पार्टी ऐप अनुरोध

पोस्ट/HTTP/1.1

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

सामग्री प्रकार: text/xml; charset = utf-8

मेजबान: shdesktop: 8000

सामग्री-लंबाई: 297

अपेक्षा: 100-जारी रखने के

कनेक्शन: बंद

WCF सर्वर प्रतिक्रिया

HTTP/1.1 415 संदेश संसाधित नहीं कर सकता क्योंकि सामग्री प्रकार 'टेक्स्ट/xml; charset = utf-8 ' अपेक्षित प्रकार' एप्लिकेशन/साबुन + xml नहीं था; charset = utf-8 '।

सामग्री-लंबाई: 0

सर्वर: माइक्रोसॉफ्ट HTTPAPI/2.0

दिनांक: मंगल, 09 फ़र, 2010 14:03:19 GMT

कनेक्शन: करीब

सेवा विन्यास

<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> 

उत्तर

19

basicHttpBinding SOAP 1.1 का उपयोग करता है - लेकिन उस स्थिति में, आपके पास application/soap+xml का एक सामग्री प्रकार होगा।

चूंकि आपका ग्राहक text/xml भेज रहा है - किसी भी मौके पर वे एक आरईएसटी इंटरफेस की उम्मीद कर रहे हैं? यह डब्ल्यूसीएफ webHttpBinding द्वारा संभाला जाएगा।

MSDN WCF REST Developer Center पर डब्लूसीएफ में आरईएसटी के बारे में और पढ़ें और प्लुरसाइट screencast series on WCF REST देखें - अत्यधिक अनुशंसित!

+0

ओह, एसओएपी 1.1 'एप्लिकेशन/साबुन + एक्सएमएल' का उपयोग करेगा? मैं कल वेब पर परीक्षण करूँगा, धन्यवाद! मुझे एक तथ्य के बारे में पता है कि जब मैं एक साधारण एएसएमएक्स सेवा बनाता हूं, तो यह काम करता है, अगर इससे कोई फर्क पड़ता है। –

+2

@ सिलास: "पुरानी शैली" एएसपी.नेट वेबसाइसेस (एएसएमएक्स) ** और ** डब्लूसीएफ मूल एचटीपी बाइंडिंग एसओएपी 1.1 का उपयोग करें - तो यह वास्तव में ठीक होना चाहिए। आपको यह जांचने की ज़रूरत है कि आपका ग्राहक आपको एक एसओएपी अनुरोध भेज रहा है या सिर्फ अपने यूआरएल –

+0

पर एक्सएमएल पोस्ट करने का प्रयास कर रहा है, मैं http: // पर कॉल कर रहा था, इसके बजाय मुझे http: // /TestService पर कॉल करने की आवश्यकता थी। मेरे द्वारा बेवकूफ गलती हालांकि सभी मदद के लिए धन्यवाद! –

6

आम तौर पर जब हम एक वेब सेवा जो पाठ भी शामिल है में एक संदेश/त्रुटि मिलती है:

content type 'text/xml' 

इसका मतलब है कि वेब सर्वर की उम्मीद एक्सएमएल प्रतिक्रिया के बजाय एक त्रुटि पृष्ठ लौट आए।

3

मेरे पास एक ही समस्या थी - परिभाषा कह रही थी कि यह साबुन 1.2 था, लेकिन 1.1 की अपेक्षा की गई क्योंकि सामग्री-प्रकार अलग था।

मैंने पाया कि अगर मैं से अपने सर्वर विन्यास समायोजित:

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

करने के लिए:

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

wsdl साबुन 1.1 इस समय के रूप में यह उजागर कर दिया।

संबंधित मुद्दे