प्रदान की गई URI योजना 'https' अमान्य है; अपेक्षित 'http'। पैरामीटर नाम: के माध्यम से


281

मैं कोशिश कर रहा हूं कि https के ऊपर इस्तेमाल होने वाली बेसिकहेटबाइंडिंग पर एक डब्ल्यूसीएफ सेवा दी जाए। यहाँ मेरा web.config है:

<!-- language: xml -->
<service behaviorConfiguration="MyServices.PingResultServiceBehavior"
         name="MyServices.PingResultService">
    <endpoint address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="defaultBasicHttpBinding"
              contract="MyServices.IPingResultService">
        <identity>
            <dns value="localhost" />
        </identity>
    </endpoint>
    <endpoint address="mex" 
              binding="mexHttpBinding" 
              contract="IMetadataExchange" />
</service>
...
<bindings>
  <basicHttpBinding>
    <binding name="defaultBasicHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
...
<behaviors>
  <serviceBehaviors>
    <behavior name="MyServices.UpdateServiceBehavior">
      <serviceMetadata httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

मैं WCFStorm का उपयोग करके कनेक्ट कर रहा हूं जो सभी मेटा डेटा को ठीक से पुनर्प्राप्त करने में सक्षम है, लेकिन जब मैं वास्तविक विधि को कॉल करता हूं तो मुझे प्राप्त होता है:

प्रदान की गई URI योजना 'https' अमान्य है; अपेक्षित 'http'। पैरामीटर नाम: के माध्यम से


4
जर्मन में, त्रुटि संदेश " दास bereitgestellte URI-स्कीमा" https "ist unüültig; erwartet wurde" http "। पैरामीटर नाम: के माध्यम से " पढ़ता है , यदि कोई भी इसे देख रहा है।
ऊव कीम

जवाबों:


240

अपने ऐप पर संदेश क्रेडेंशियल्स जोड़ने का प्रयास करें। जैसे:

<bindings> 
<basicHttpBinding> 
<binding name="defaultBasicHttpBinding"> 
  <security mode="Transport"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
    <message clientCredentialType="Certificate" algorithmSuite="Default" />
  </security> 
</binding> 
</basicHttpBinding> 
</bindings> 

35
ओपी को इस प्रतिक्रिया के लिए धन्यवाद; मैं एक ही मुद्दा था और "ट्रांसपोर्ट" के डिफ़ॉल्ट से <Security> टैग के मोड को बदलकर "ट्रांसपोर्ट" में तय कर दिया।
ओटिस

1
<Message> ब्लॉक को छोड़कर, जिसे किसी कारण से IIS6 द्वारा अस्वीकार कर दिया गया था, इसने अच्छी तरह से काम किया।
क्रिस चूब 3

4
मेरी परियोजना के लिए एक ही विन्यास की नकल की, लेकिन यह कुछ भी नहीं देता है। क्या मुझे जोड़ने के लिए कुछ भी याद आया?

1
बहुत बहुत धन्यवाद। मैंने ऑनलाइन पाए गए कई समाधानों की कोशिश की लेकिन उनमें से किसी ने भी काम नहीं किया। यह एक परिपूर्ण था।
23

59

इसे एक उत्तर के रूप में जोड़ना, बस जब से आप टिप्पणियों में बहुत अधिक फैंसी स्वरूपण नहीं कर सकते।
मेरे पास एक ही मुद्दा था, सिवाय इसके कि मैं अपने वेब सेवा क्लाइंट को पूरी तरह से कोड में बना रहा था और बांध रहा था।
कारण यह है कि DLL को एक सिस्टम में अपलोड किया जा रहा था, जिसमें कॉन्फिग फाइल का उपयोग निषिद्ध था।

यहाँ कोड है क्योंकि इसे SSL पर संचार करने के लिए अद्यतन करने की आवश्यकता है ...

Public Function GetWebserviceClient() As WebWorker.workerSoapClient
    Dim binding = New BasicHttpBinding()
    binding.Name = "WebWorkerSoap"
    binding.CloseTimeout = TimeSpan.FromMinutes(1)
    binding.OpenTimeout = TimeSpan.FromMinutes(1)
    binding.ReceiveTimeout = TimeSpan.FromMinutes(10)
    binding.SendTimeout = TimeSpan.FromMinutes(1)

    '// HERE'S THE IMPORTANT BIT FOR SSL
    binding.Security.Mode = BasicHttpSecurityMode.Transport

    Dim endpoint = New EndpointAddress("https://myurl/worker.asmx")

    Return New WebWorker.workerSoapClient(binding, endpoint)
End Function

आपने अपनी वेब सेवा के लिए कक्षाएं कैसे बनाईं?
kaiyaq

यह काम करता हैं! मेरे C # में भी यही समस्या थी। बस कॉपी पेस्ट और समस्या हल।
15:34 पर user3417479

@kaiyaq - मैं अभी भी सभी मानक सामानों के साथ विकास के लिए सेवा ठीक से जुड़ सकता हूं, जिससे वीएस मेरे लिए कक्षाएं बना सकें, जो तब डीएलएल में संकलित हो जाते हैं। यह सिर्फ रनटाइम पर है मैं सभी कनेक्शन जानकारी के साथ कॉन्फिग फाइल अपलोड नहीं कर सकता।
ईडीओलीन

BasicHttpBinding System.ServiceModel का उपयोग करके मौजूद है; FYI करें भविष्य के पाठक।
DLeh


30

क्या आप इसे कैसिनी (बनाम देव सर्वर) पर या आईआईएस पर स्थापित प्रमाणपत्र के साथ चला रहे हैं? मैं अतीत में मुद्दों को देव वेब सर्वर पर सुरक्षित समापन बिंदु हुक करने की कोशिश कर रहा है।

यहाँ बाध्यकारी विन्यास है जो अतीत में मेरे लिए काम कर चुका है। इसके बजाय basicHttpBinding, यह उपयोग करता है wsHttpBinding। मुझे नहीं पता कि आपके लिए यह समस्या है।

<!-- Binding settings for HTTPS endpoint -->
<binding name="WsSecured">
    <security mode="Transport">
        <transport clientCredentialType="None" />
        <message clientCredentialType="None"
            negotiateServiceCredential="false"
            establishSecurityContext="false" />
    </security>
</binding>

और समापन बिंदु

<endpoint address="..." binding="wsHttpBinding"
    bindingConfiguration="WsSecured" contract="IYourContract" />

इसके अलावा, सुनिश्चित करें कि आप परिवहन सुरक्षा को सक्षम करने के लिए क्लाइंट कॉन्फ़िगरेशन को बदलते हैं।


1
स्थानीय IIS 7 स्व-हस्ताक्षरित प्रमाणपत्र के साथ स्थापित किया गया
isg

13
"इसके अलावा, सुनिश्चित करें कि आप परिवहन सुरक्षा को सक्षम करने के लिए क्लाइंट कॉन्फ़िगरेशन को बदलते हैं।" -- अच्छी सलाह। बहुत आसानी से अनदेखी की गई और WCF अपनी त्रुटियों में सुराग नहीं देगा।
ल्यूक पुप्लेट

मान्य बातचीत नहीं
हैसामान्य सेवा

20

एक custom bindingपरिदृश्य में मेरे पास एक ही अपवाद था । इस दृष्टिकोण का उपयोग करने वाला कोई भी व्यक्ति इसे देख सकता है।

मैं वास्तव में एक local WSDL फ़ाइल से सेवा संदर्भ जोड़ रहा था । यह सफलतापूर्वक जोड़ा गया और आवश्यक कस्टम बाइंडिंग को कॉन्फ़िगर फ़ाइल में जोड़ा गया। हालाँकि, वास्तविक सेवा https थी; http नहीं। इसलिए मैंने httpTransport के एलिमेंट को बदल दिया httpsTransport। इससे समस्या ठीक हो गई

<system.serviceModel>
<bindings>

  <customBinding>
    <binding name="MyBindingConfig">

      <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
        messageVersion="Soap11" writeEncoding="utf-8">
        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      </textMessageEncoding>

      <!--Manually changed httpTransport to httpsTransport-->
      <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
        bypassProxyOnLocal="false" 
        decompressionEnabled="true" hostNameComparisonMode="StrongWildcard"
        keepAliveEnabled="true" maxBufferSize="65536" 
        proxyAuthenticationScheme="Anonymous"
        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
        useDefaultWebProxy="true" />
    </binding>
  </customBinding>

</bindings>

<client>
  <endpoint address="https://mainservices-certint.mycompany.com/Services/HRTest"
    binding="customBinding" bindingConfiguration="MyBindingConfig"
    contract="HRTest.TestWebserviceManagerImpl" name="TestWebserviceManagerImpl" />
</client>


</system.serviceModel>

संदर्भ

  1. Http और https दोनों पर कस्टमबाइंडिंग के साथ WCF

19

मैं ओपी के रूप में एक ही मुद्दा था। मेरा विन्यास और स्थिति समान थी। विजुअल स्टूडियो में एक परीक्षण परियोजना में सेवा संदर्भ बनाने और यह पुष्टि करने के बाद कि सेवा काम कर रही थी, मैंने अंत में इसे WCFStorm में एक मुद्दा बना दिया। तूफान में आपको "विन्यास" सेटिंग्स विकल्प ("क्लाइंट कॉन्फ़िगरेशन" नहीं) पर क्लिक करने की आवश्यकता है। उस पर क्लिक करने के बाद, जो पॉप अप होता है, उस पर "सुरक्षा" टैब पर क्लिक करें। सुनिश्चित करें कि "प्रमाणीकरण प्रकार" "कोई नहीं" पर सेट है (डिफ़ॉल्ट "विंडोज प्रमाणीकरण" है)। प्रेस्टो, यह काम करता है! मैं हमेशा WCFStorm में अपने तरीकों का परीक्षण करता हूं क्योंकि मैं उन्हें बना रहा हूं, लेकिन कभी भी इसका उपयोग करने की कोशिश नहीं की है जो पहले से ही एसएसएल पर सेट किया गया है। आशा है कि यह किसी की मदद करता है!


मुझे यह वही समस्या थी, लेकिन मेरे पास "उपयोगकर्ता नाम / पासवर्ड प्रमाणीकरण" का उपयोग करके गलत पासवर्ड था। यह पता चला है कि यदि आप अपना पासवर्ड बदलते हैं, तो आपको इसे लेने के लिए सेवा के URL और टूलबार पर "ताज़ा करें" बटन पर क्लिक करना होगा।
रयान

12

एक ही मुद्दे में भाग गया, इस तरह मेरा समाधान अंत में निकला:

        <basicHttpsBinding>
            <binding name="VerificationServicesPasswordBinding">
              <security mode="Transport">
              </security>
            </binding>
            <binding name="VerificationServicesPasswordBinding1" />
        </basicHttpsBinding>

मैंने मूल रूप से Http की हर घटना को Https के साथ बदल दिया है। आप चाहें तो दोनों को जोड़ने की कोशिश कर सकते हैं।


5
ध्यान दिया जाना चाहिए कि basicHttpsBinding 4.5 और नया है।
जगद

7

यदि आप यह प्रोग्राम करते हैं और web.config में नहीं करते हैं:

new WebHttpBinding(WebHttpSecurityMode.Transport)

महान। मैं हमेशा .exe.config फ़ाइलों से नफरत करता था, और कोड के बजाय सब कुछ करता हूं। इससे मेरी समस्या हल हो गई।
nivs1978

4

यह याद रखने की एक अच्छी बात यह है कि विभिन्न फाइलों (देव / डेमो / प्रोडक्शन आदि) पर कॉन्फिगर बदलाव को आसान बनाने के लिए कॉन्फिग फाइल को सेकेंडरी फाइल्स में विभाजित किया जा सकता है, बिना कोड / एप आदि को रिजेक्ट किए, उदाहरण के लिए हम उन्हें ऑनसाइट इंजीनियरों को अनुमति देने के लिए उपयोग करते हैं। वास्तव में 'वास्तविक' फ़ाइलों को छूने के बिना समापन बिंदु परिवर्तन करें।

पहला कदम WPF App.Config से बाइंडिंग सेक्शन को स्थानांतरित करना है।

व्यवहार अनुभाग http और https दोनों की अनुमति देने के लिए सेट है (यदि दोनों की अनुमति हो तो ऐप पर कोई प्रभाव नहीं पड़ता है)

<serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />

और हम बाइंडिंग अनुभाग को अपनी फ़ाइल में स्थानांतरित करते हैं;

 <bindings configSource="Bindings.config" /> 

Bindings.config फ़ाइल में हम प्रोटोकॉल के आधार पर सुरक्षा स्विच करते हैं

  <!-- None = http:// -->
  <!-- Transport = https:// -->
  <security mode="None" >

अब साइट इंजीनियरों को केवल Bindings.Config फ़ाइल और Client.Config को बदलने की आवश्यकता है जहाँ हम प्रत्येक समापन बिंदु के लिए वास्तविक URL संग्रहीत करते हैं।

इस तरह से हम किसी भी कोड को बदलने के बिना http से https और फिर से ऐप का परीक्षण करने के लिए अंतिम बिंदु को बदल सकते हैं।

उम्मीद है की यह मदद करेगा।


2

ओपी में प्रश्न को फिर से कैप करने के लिए:

मैं WCFStorm का उपयोग करते हुए [एक WCF सेवा] से जुड़ रहा हूं जो सभी मेटा डेटा को ठीक से प्राप्त करने में सक्षम है, लेकिन जब मैं वास्तविक विधि को प्राप्त करता हूं, तो मैं कॉल करता हूं:

प्रदान की गई URI योजना 'https' अमान्य है; अपेक्षित 'http'। पैरामीटर नाम: के माध्यम से

WCFStorm ट्यूटोरियल IIS और SSL के साथ कार्य करने में इस समस्या को हल करता है

उनके समाधान ने मेरे लिए काम किया:

  1. त्रुटि को ठीक करने के लिए, wcf सेवा कॉन्फ़िगरेशन से मेल खाता क्लाइंट कॉन्फिगरेशन जनरेट करें। ऐसा करने का सबसे आसान तरीका विजुअल स्टूडियो है।

    • विज़ुअल स्टूडियो खोलें और सेवा में सेवा संदर्भ जोड़ें। वीएस सेवा से मेल खाता एक ऐप.कॉन्फ़िग फ़ाइल उत्पन्न करेगा

    • App.config फ़ाइल को संपादित करें ताकि इसे WCFStorm द्वारा पढ़ा जा सके। कृपया लोड हो रहा है क्लाइंट App.config फ़ाइलें देखें । सुनिश्चित करें कि समापन बिंदु / @ नाम और समापन बिंदु / @ अनुबंध विशेषताएँ wcfstorm में मूल्यों से मेल खाती हैं।

  2. WCFStorm [क्लाइंट कॉन्फिगर टोबार बटन का उपयोग करके] संशोधित एप्लिकेशन को लोड करें।

  3. विधि का आह्वान करें। इस बार विधि आह्वान अब विफल नहीं होगा

आइटम (1) प्रभाव में अंतिम गोली का मतलब है कि वीएस एंडपॉइंट कॉन्ट्रैक्ट एट्रिब्यूट के लिए उपसर्ग को हटाता है , डिफ़ॉल्ट रूप से "ServiceReference1"

<endpoint ... contract="ServiceReference1.ListsService" ... />

app.config में इतना है कि आप WCFStorm में लोड आप ListsService के लिए चाहते हैं:

<endpoint ... contract="ListsService" ... />

2

मुझे काम करने के लिए निम्नलिखित बाइंडिंग की आवश्यकता थी:

        <binding name="SI_PurchaseRequisition_ISBindingSSL">
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
          </security>
        </binding>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.