हाय हब्रज़ितली!

मैं हाल ही में एक समस्या में भाग गया, मुझे जावा से .NET
डब्ल्यूसीएफ सेवा को कॉल करना पड़ा। मुझे कार्यान्वयन के कई उदाहरण मिले, मैं उनमें से एक को साझा करना चाहता हूं, और अचानक कोई काम आता है। इंटरनेट से चलने के बाद, मुझे
SOAP सेवाओं के लिए टर्नकी
समाधान मिला। उन्होंने उसके साथ व्यवहार नहीं किया और खोज जारी रखी। फिर, WCF RESTful सेवा का उपयोग करके एक समाधान पाया गया, जो
JSON प्रारूप में डेटा
लौटाता है । मैंने अधिक विस्तार से समझने का प्रयास किया और कोशिश की कि यह कैसे काम करता है।
इसलिए, शुरुआत के लिए, हमें
WCF RESTful सेवा को लिखना होगा। सबसे पहले, हम एक डेटा अनुबंध परिभाषित करते हैं:
Message.cs
using System.Runtime.Serialization; namespace TestService { [DataContract] public class Message { [DataMember(Order = 1)] public string Header { get; set; } [DataMember(Order =2)] public string Body { get; set; } } }
हम उन तत्वों के क्रम को सेट करते हैं जो वेब सेवा
ऑर्डर = x के माध्यम से वापस आ जाएगी।
फिर हम सेवा अनुबंध को परिभाषित करते हैं:
ITestService.cs
using System.ServiceModel; using System.ServiceModel.Web; namespace TestService { [ServiceContract] public interface ITestService { [OperationContract] [WebGet(UriTemplate = "/GetMessage/?header={header}&?body={body}", ResponseFormat = WebMessageFormat.Json)] Message ComposeMessage(string header, string body); } }
आप
यहाँ UriTemplate के बारे में अधिक पढ़ सकते हैं।
हमें सेवा का एहसास है:
TestService.svc.cs
using System.ServiceModel.Activation; namespace TestService { public class TestService : ITestService { #region ITestService Members public Message ComposeMessage(string header, string body) { Message message = new Message() { Header = header, Body = body }; return message; } #endregion } }
और निश्चित रूप से सेवा विन्यास:
web.config
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="TestService.TestService"> <endpoint binding="webHttpBinding" contract="TestService.ITestService" behaviorConfiguration="webHttp"/> </service> </services> <behaviors> <endpointBehaviors> <behavior name="webHttp"> <webHttp helpEnabled="true"/> </behavior> </endpointBehaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
हम IIS में सेवा होस्ट करेंगे (यह या तो Visual Studio में या IIS प्रबंधक के माध्यम से किया जा सकता है)। एक वर्चुअल डायरेक्टरी बनाएं, इसे
टेस्टस्कूल कहें।
यदि WCF- प्रबंधित IIS के भीतर होस्ट किया जाता है, तो WCF को आमतौर पर एक .svc फ़ाइल की आवश्यकता होती है जो सेवा के प्रकार को इंगित करती है, साथ ही साथ web.config फ़ाइल में प्रविष्टियां होती हैं जो WCF को समापन बिंदु (बंधन और व्यवहार, अन्य सेटिंग्स के बीच) के बारे में सूचित करती हैं।
और अंतिम स्पर्श:
TestService.svc
<%@ ServiceHost Language="C#" Debug="true" Service="TestService.TestService" CodeBehind="TestService.svc.cs" %>
सभी चरणों के बाद, हमारी आभासी निर्देशिका में लगभग निम्नलिखित सामग्री होनी चाहिए:
बिन फ़ोल्डर में सेवा के साथ
* .dll होना चाहिए।
हमारी सारी सेवा तैयार है। परिणाम का परीक्षण करने के लिए, ब्राउज़र के एड्रेस बार में हम टाइप करते हैं
localhost / TestService / TestService.svc / GetMessage /? शीर्ष लेख = नमस्ते और निकाय = विश्व
परिणाम इस तरह दिखना चाहिए:
{"हेडर": "हैलो", "बॉडी": "वर्ल्ड"}
यह
JSON रिस्पांस है।
अंत में, चलिए अपने Android एप्लिकेशन पर चलते हैं।
मैं आपको
इस पोस्ट को फिर से पढ़ने की सलाह देता हूं। हम
इसमें से AsyncTask कार्यान्वयन को उधार
लेंगे ।
सभी कोड प्रकाशित करने का कोई मतलब नहीं है, इसलिए हम केवल उस विधि को "कट आउट" करेंगे जो सेवा से आई
JSON प्रतिक्रिया को पार्स करेगी। यहाँ उसका कोड है:
private String getMessage(String header, String body) { HttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet(_resources.getString(R.string.serviceAddress) + "/GetMessage/?header="+ header + "&?body=" + body); HttpResponse response; try { response = httpclient.execute(httpget); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); String result = convertStreamToString(instream); JSONObject json = new JSONObject(result);
_ServiceAddress सेवा का पता इस तरह दिखेगा:
10.0.2.2/TestService/TestService.svc
चूँकि,
लोकलहोस्ट को एक्सेस करने के दौरान, हम एक
कनेक्शन प्राप्त
IOException (किसी को भी दिलचस्पी है,
यहाँ और अधिक पढ़ें) मिलता है।
इसके अलावा,
AndroidManifest.xml फ़ाइल में
उपयोग-अनुमति को जोड़ा जाना चाहिए ताकि एप्लिकेशन वेब सेवा को कॉल कर सके:
<uses-permission android:name="android.permission.INTERNET" />
मूल रूप से यह सब मैं बताना चाहता था ...
सूत्रों का कहना है:
यहाँ झूठ बोलना।
उपयोगी लिंक:
ध्यान देने के लिए आप सभी का धन्यवाद!