c# दुनिया - सी#साबुन ग्राहक समस्या-अनुबंध पर वें के लिए एक से अधिक अंतराल विन्यास पाया गया था




बेस्ट होने (5)

मैं यहां से SOAP API का परीक्षण करने के लिए एक सरल सी # कंसोल एप्लिकेशन लिखने की कोशिश कर रहा हूं: https://www.imailtest.co.uk/webservice/imail_api.asmx?wsdl (या https://www.imailtest.co.uk/webservice/imail_api.asmx api विधियों को देखने के लिए https://www.imailtest.co.uk/webservice/imail_api.asmx )

इसलिए, मैंने इस संदर्भ को जोड़ा और 2 एपीआई विधियों (Authentiacate और ProcessPrintReadyPDF) को कॉल करने का प्रयास किया और इस त्रुटि को प्राप्त किया:

त्रुटि: अनुबंध 'ServiceReference1.imail_ apiSoap' अनुबंध के लिए एक एंडपॉइंट कॉन्फ़िगरेशन अनुभाग लोड नहीं किया जा सका क्योंकि अनुबंध पर वें के लिए एक से अधिक एंडपॉइंट कॉन्फ़िगरेशन मिला था। कृपया नाम से पसंदीदा एंडपॉइंट कॉन्फ़िगरेशन संप्रदाय आयन इंगित करें।

यहां मेरा सी # कोड है:

static void Main(string[] args)
{
    // Anticipate Error
    try
    {
        // Generate SOAP Client
        ServiceReference1.imail_apiSoapClient soapClient = new ServiceReference1.imail_apiSoapClient();

        // Login
        Console.WriteLine("Authenticating");
        soapClient.Authenticate(iMailUser, iMailPass);

        // Proceed If PDF File Exists
        if (File.Exists(PDFFile))
        {
            // Upload PDF File To iMail
            Console.WriteLine("Uploading PDF File");
            soapClient.ProcessPrintReadyPDF(File.ReadAllBytes(PDFFile), "", true);

            // Test Complete
            Console.WriteLine("Done");
        }
        else
        {
            // Log Error
            Console.WriteLine("PDF File [{0}] Does Not Exists", PDFFile);
        }
    }
    catch (Exception ex)
    {
        // Log Error
        Console.WriteLine("Error : "+ ex.Message);
    }

    // End Test
    Console.WriteLine("Press any key to continue ...");
    Console.ReadKey();
}

इस प्रकार मैंने अपने कंसोल ऐप के सेवा संदर्भ को जोड़ा: http://i.imgur.com/mKmRyrI.png

कोई विचार?


Answers

आपके App.config में आप इस तरह की कुछ चीज़ देख सकते हैं

 <client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxx"
        contract="xxxxxxxxxx" name="xxxxxxxxxxxxx" />
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx"
        binding="customBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxx" name="xxxxxxxxxxxxx" />
  </client>

दूसरे एंडपॉइंट को हटा दें और अब यह इस तरह होना चाहिए

<client>
      <endpoint address="https://www.imailtest.co.uk/webservice/imail_api.asmx "
        binding="basicHttpBinding" bindingConfiguration="xxxxxxxxxxxxx"
        contract="xxxxxxxxxxxxxx" name="xxxxxxxxxxxxxxx" />      
  </client>

अब कोड चलाएं, उम्मीद है कि आपका कोड ठीक काम करता है


मेरा मानना ​​है कि इस तरह के अनुबंध नाम को परिभाषित करके समस्या हल हो गई है (मेरे स्क्रीनशॉट के आधार पर):

ServiceReference1.imail_apiSoapClient soapClient = 
new ServiceReference1.imail_apiSoapClient("imail_apiSoap");

अब, मुझे अब कोई त्रुटि नहीं मिल रही है और एपीआई काम कर रहा है।


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

तो आपकी App.config फ़ाइल में यह प्रविष्टि होगी जो आपको इच्छित अंतराल निर्दिष्ट करने की अनुमति देगी:

<setting name="EndPoint" serializeAs="String">
    <value>imail_apiSoap</value>
</setting>

तो आप अपने कोड में उपयोग कर सकते हैं:

ServiceReference1.imail_apiSoapClient soapClient =
    new ServiceReference1.imail_apiSoapClient(Properties.Settings.Default.EndPoint);

[हल किया! बस स्क्रीन शॉट के नीचे webservice की प्रॉक्सी क्लास एएसपी में एंड पॉइंट जोड़ें


एसओएपी और एक्सएमएल का उपयोग करने वाला कोई भी अन्य प्रोटोकॉल आम तौर पर आपके संदेशों को थोड़ा सा फहराता है - यह संदर्भ के आधार पर कोई समस्या हो सकती है या नहीं भी हो सकती है।

जेएसओएन की तरह कुछ अधिक कॉम्पैक्ट और सीरियल / deserialise के लिए शायद तेज होगा - लेकिन उस कारण के लिए विशेष रूप से इसका उपयोग न करें। जो भी आपको लगता है वह उस समय समझ में आता है और यदि यह कोई समस्या है तो इसे बदलें।

कुछ भी जो HTTP का उपयोग करता है आम तौर पर (जब तक यह एक HTTP 1.1 रखरखाव कनेक्शन का पुन: उपयोग नहीं कर रहा है, जो कई कार्यान्वयन नहीं करता है) प्रत्येक अनुरोध के लिए एक नया टीसीपी कनेक्शन शुरू करता है; यह काफी बुरा है, खासकर उच्च विलंबता लिंक पर। एचटीटीपीएस बहुत खराब है। यदि आपके पास एक प्रेषक से एक रिसीवर तक बहुत से छोटे अनुरोध हैं, तो इस बारे में सोचें कि आप इस ओवरहेड को कैसे ले सकते हैं।

किसी भी प्रकार के आरपीसी (चाहे एसओएपी या कुछ और) के लिए HTTP का उपयोग करना हमेशा उस ओवरहेड को लेना होगा। अन्य आरपीसी प्रोटोकॉल आम तौर पर आपको कनेक्शन खोलने की अनुमति देते हैं।





c# soap