2009-11-25 7 views
40

होना चाहिए मेरे पास एक होस्टेड डब्ल्यूसीएफ सेवा है जिसके लिए मैंने एक कस्टम फैक्ट्री बनाई है, ताकि यह एकाधिक होस्ट हेडर के साथ काम करे:डब्ल्यूसीएफ त्रुटि: इस कारखाने पर मैन्युअल एड्रेसिंग सक्षम है, इसलिए भेजे गए सभी संदेश पूर्व-संबोधित

/// <summary> 
/// Required for hosting where multiple host headers are present 
/// </summary> 
public class MultipleHostServiceFactory : ServiceHostFactory 
{ 
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
    { 
     List<Uri> addresses = new List<Uri>(); 
     addresses.Add(baseAddresses[0]); 
     return base.CreateServiceHost(serviceType, addresses.ToArray()); 
    } 
} 

मैं बहुत यकीन है कि मेरी config फ़ाइलों अब ठीक कह रहे हैं, दोनों क्लाइंट और सर्वर (can be seen here) पर कर रहा हूँ।

त्रुटि मैं हो रही है कारखाने के लिए संबंधित प्रतीत होता है:

मैनुअल को संबोधित करते हुए इस कारखाने पर सक्षम है तो भेजे गए सभी संदेशों पूर्व संबोधित किया जाना चाहिए।

public string GetData(int value) { 
    return base.Channel.GetData(value); 
} 

त्रुटि return base.Channel.GetData(value); पर त्रुटि होती है।

उत्तर

57

मैं इस त्रुटि का अनुभव हुआ और समस्या WebHttpBehavior (नीचे पंक्ति 2) जोड़कर हल किया गया था:

var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri); 
factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
var proxy = factory.CreateChannel(); 
+3

उपर्युक्त उत्तरों में मदद नहीं मिली। लेकिन आपका समाधान काम करता है। धन्यवाद। – Matthias

+1

यदि एंडपॉइंट में निर्दिष्ट है, तो आपको इसके बजाय WebScriptEnablingBehavior का उपयोग करने की आवश्यकता है, अन्यथा आपको हमेशा "दोषपूर्ण स्थिति" मिल जाएगी। –

+1

यह मेरे लिए काम करता था, लेकिन मुझे WebHttpBehavior -> 'System.ServiceModel.Description का उपयोग करके एक संदर्भ संदर्भ भी जोड़ना पड़ा; ' –

1

मुझे नहीं लगता कि यह आपके कारखाने के साथ कुछ भी करने के लिए आवश्यक है।

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.transportbindingelement.manualaddressing.aspx

या दूसरों देखें पहले कुछ बिंग के बीच "manualaddressing" के लिए करता है। ऐसा लगता है कि बाध्यकारी इस्तेमाल किया जा रहा है स्टैक/मैसेजिंग तर्क के कुछ अन्य हिस्से के साथ असंगत है।

+0

ठीक है, मैं कस्टम नीलामी का उपयोग नहीं कर रहा हूँ - दोनों में परिभाषित किया गया - वेब WebHttpBinding का उपयोग कर। प्रारंभ में एक समस्या यह थी कि ग्राहक के पास केवल कस्टम बाध्यकारी परिभाषित था (मैंने बस अपने डब्ल्यूसीएफ सर्वर के लिए एक सेवा संदर्भ दिया और बाकी वीएस को बाकी करने दें)। फिर भी इस नई त्रुटि की जांच कर रहे ... – ElHaix

+0

और 'WebHttpBinding' 'सेवा संदर्भ जोड़ें' एक साथ अच्छी तरह से काम नहीं करते, और त्रुटि की व्याख्या करता है। मुझे लगता है कि आपका ग्राहक आपकी आरईएसटी-वाई सेवा के लिए बाध्यकारी डब्लूएस-एड्रेसिंग का उपयोग करके SOAP से बात करने का प्रयास कर रहा है जो सिर्फ HTTP बोलता है। – Brian

+0

उदा। देखें http: // damianm।com/tech/building-a-rest-client-with-wcf/ – Brian

2

तो आखिरकार यह खत्म हो गया है!

ब्रायन - इस पर आपके मार्गदर्शन के लिए धन्यवाद। बाइंडिंग गलत गठबंधन कर रहे थे/क्लाइंट और सर्वर टी बी, और मैं अंत में दोनों में निम्नलिखित के साथ जा रहा समाप्त हो गया:

<basicHttpBinding> 
    <binding name="TransportSecurity"> 
     <security mode="Transport"> 
     <transport clientCredentialType="None"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 

... और बाध्यकारी उनके अंतिम बिंदु की स्थापना और bindingConfiguration तदनुसार गुण:

<endpoint binding="basicHttpBinding" 
      bindingConfiguration="TransportSecurity" 
      contract="ServiceReference1.IService" 
      name="WebHttpBinding_IService" 
      address="https://mysslserver.com/Service.svc" /> 

चूंकि यह मेरे लिए अपेक्षाकृत नया टर्फ है, केवल यह बताएं कि क्यों उन त्रुटियों को पॉप अप करना सही दिशा में मुझे ले जाता है :)।

25

मैं हमेशा की तरह एक सेवा संदर्भ जोड़ा गया है और यह त्रुटि हुई। पता चला है सब मैं करना था webhttp

<client> 
    <endpoint address="http://localhost:9000/GeoConverterService/GeoConverterService.svc" 
      binding="webHttpBinding" 
      contract="GeoConverter.IGeoConverterService" 
      behaviorConfiguration="webhttp"/> 
</client> 

<behaviors> 
    <endpointBehaviors> 
    <behavior name="webhttp"> 
     <webHttp/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

specifing एक व्यवहार के साथ कि समाप्ति बिंदु config उपयोग करने के लिए ग्राहक config में संशोधन करने का था

+2

एचएम ... जैसे ही मैं इसे जोड़ता हूं तो मुझे '(405) विधि अनुमत नहीं मिलता है। –

0

हाँ जेसन Mardell द्वारा जवाब के रूप में अच्छी तरह से मेरे लिए काम किया, मेरा बाध्यकारी एक व्यवहार को इंगित नहीं करता था। तो बंधन में मैं कहा: behaviorConfiguration="webhttp"

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