Android के साथ WCF सेवा का उपभोग कैसे करें


79

मैं .NET में एक सर्वर और एंड्रॉइड के लिए एक क्लाइंट एप्लिकेशन बना रहा हूं। मैं एक प्रमाणीकरण पद्धति लागू करना चाहूंगा जो सर्वर को उपयोगकर्ता नाम और पासवर्ड भेजता है और एक सर्वर एक सत्र स्ट्रिंग वापस भेजता है।

मैं WCF से परिचित नहीं हूं इसलिए मैं आपकी मदद की वास्तव में सराहना करूंगा।

जावा में मैंने निम्नलिखित विधि लिखी है:

private void Login()
{
  HttpClient httpClient = new DefaultHttpClient();
  try
  {
      String url = "http://192.168.1.5:8000/Login?username=test&password=test";

    HttpGet method = new HttpGet( new URI(url) );
    HttpResponse response = httpClient.execute(method);
    if ( response != null )
    {
      Log.i( "login", "received " + getResponse(response.getEntity()) );
    }
    else
    {
      Log.i( "login", "got a null response" );
    }
  } catch (IOException e) {
    Log.e( "error", e.getMessage() );
  } catch (URISyntaxException e) {
    Log.e( "error", e.getMessage() );
  }
}

private String getResponse( HttpEntity entity )
{
  String response = "";

  try
  {
    int length = ( int ) entity.getContentLength();
    StringBuffer sb = new StringBuffer( length );
    InputStreamReader isr = new InputStreamReader( entity.getContent(), "UTF-8" );
    char buff[] = new char[length];
    int cnt;
    while ( ( cnt = isr.read( buff, 0, length - 1 ) ) > 0 )
    {
      sb.append( buff, 0, cnt );
    }

      response = sb.toString();
      isr.close();
  } catch ( IOException ioe ) {
    ioe.printStackTrace();
  }

  return response;
}

लेकिन सर्वर साइड पर अब तक मुझे कुछ भी पता नहीं चला है।

मैं वास्तव में शुक्रगुज़ार होऊंगा अगर कोई यह बता सके कि कैसे उपयुक्त App स्ट्रिंग लॉगिन (स्ट्रिंग यूज़रनेम, स्ट्रिंग पासवर्ड) उपयुक्त App.config सेटिंग्स और इंटरफ़ेस के साथ उपयुक्त [OperationContract] हस्ताक्षर के साथ क्लाइंट से इन दो मापदंडों को पढ़ने के लिए और उत्तर दें सत्र का तार।

धन्यवाद!


2
मुझे एंड्रॉइड पर wcf बाइनरी धारावाहिक का उपभोग करने का एक तरीका देखना अच्छा लगेगा। अब वह शांत रहेगा।
ब्रैडी मोरिट्ज़

जवाबों:


41

WCF के साथ आरंभ करने के लिए, वेब-सर्विस बाइंडिंग के लिए केवल डिफ़ॉल्ट SOAP प्रारूप और HTTP POST (GET के बजाय) का उपयोग करना सबसे आसान हो सकता है। काम पाने के लिए सबसे आसान HTTP बाइंडिंग "basicHttpBinding" है। यहाँ एक उदाहरण है कि ServiceContract / OperationContract आपकी लॉगिन सेवा के लिए कैसा दिख सकता है:

[ServiceContract(Namespace="http://mycompany.com/LoginService")]
public interface ILoginService
{
    [OperationContract]
    string Login(string username, string password);
}

सेवा का कार्यान्वयन इस तरह दिख सकता है:

public class LoginService : ILoginService
{
    public string Login(string username, string password)
    {
        // Do something with username, password to get/create sessionId
        // string sessionId = "12345678";
        string sessionId = OperationContext.Current.SessionId;

        return sessionId;
    }
}

आप सेवाहोस्ट का उपयोग करके इसे विंडोज़ सेवा के रूप में होस्ट कर सकते हैं, या आप इसे सामान्य ASP.NET वेब (सेवा) एप्लिकेशन की तरह IIS में होस्ट कर सकते हैं। इन दोनों के लिए बहुत सारे ट्यूटोरियल हैं।

WCF सेवा कॉन्‍फ़िगर इस तरह दिख सकता है:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>


    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="LoginServiceBehavior">
                    <serviceMetadata />
                </behavior>
            </serviceBehaviors>
        </behaviors>

        <services>
            <service name="WcfTest.LoginService"
                     behaviorConfiguration="LoginServiceBehavior" >
                <host>
                    <baseAddresses>
                        <add baseAddress="http://somesite.com:55555/LoginService/" />
                    </baseAddresses>
                </host>
                <endpoint name="LoginService"
                          address=""
                          binding="basicHttpBinding"
                          contract="WcfTest.ILoginService" />

                <endpoint name="LoginServiceMex"
                          address="mex"
                          binding="mexHttpBinding"
                          contract="IMetadataExchange" />
            </service>
        </services>
    </system.serviceModel>
</configuration>

(MEX सामान उत्पादन के लिए वैकल्पिक है, लेकिन WcfTestClient.exe के साथ परीक्षण के लिए, और सेवा मेटा-डेटा को उजागर करने के लिए आवश्यक है)।

आपको सेवा के लिए एक SOAP संदेश पोस्ट करने के लिए अपने जावा कोड को संशोधित करना होगा। नॉन-डब्ल्यूसीएफ क्लाइंट्स के साथ इंटर-ऑपरेटिंग करते समय WCF थोड़ा अचार हो सकता है, इसलिए आपको इसे काम करने के लिए POST हेडर्स के साथ थोड़ा गड़बड़ करना होगा। एक बार जब आप इसे चालू कर लेते हैं, तो आप लॉगिन के लिए सुरक्षा की जांच शुरू कर सकते हैं (बेहतर सुरक्षा प्राप्त करने के लिए एक अलग बंधन का उपयोग करने की आवश्यकता हो सकती है), या संभवतः SOC / POST के बजाय GET के साथ लॉगिन के लिए अनुमति देने के लिए WCF REST का उपयोग कर सकते हैं।

यहाँ एक उदाहरण है कि जावा कोड से HTTP POST कैसा दिखना चाहिए। " फ़िडलर " नामक एक उपकरण है जो वेब-सेवाओं को डीबग करने के लिए वास्तव में उपयोगी हो सकता है।

POST /LoginService HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://mycompany.com/LoginService/ILoginService/Login"
Host: somesite.com:55555
Content-Length: 216
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Login xmlns="http://mycompany.com/LoginService">
<username>Blah</username>
<password>Blah2</password>
</Login>
</s:Body>
</s:Envelope>

1
कैसे द्वैध wcf- कॉम्यूनिकेशन पाने के लिए पर कोई विचार? मतदान या सच्चा धक्का कोई मायने नहीं रखता।
अलक्षन्धर

1
मैं REST विकल्प की सिफारिश करूंगा, SOAP आपको फायदे की तुलना में अधिक समस्याएं लाएगा। यदि आप SSL एन्क्रिप्शन के साथ REST का उपयोग करते हैं, तो आपकी वेब सेवा बहुत सुरक्षित होगी।
राफा

4
हाँ, मैं अब REST की भी सिफारिश करूँगा, यह उत्तर कुछ साल पहले का था जब REST / JSON तब तक प्रचलित नहीं थे जैसा कि वे अब हैं।
एंडी व्हाइट

कृपया पोस्ट देखने के लिए stackoverflow.com/questions/33183506/…
kartheeki j

7

एक अन्य विकल्प डब्ल्यूसीएफ से बचने के लिए एक साथ हो सकता है और बस एक .NET HttpHandler का उपयोग करें। HttpHandler आपके GET से क्वेरी-स्ट्रिंग चर को पकड़ सकता है और जावा कोड पर प्रतिक्रिया लिख ​​सकता है।


6
आप ऐसा कर सकते हैं, लेकिन एक उचित ढांचे के बिना, ऐसा लगता है कि यह नाजुक और बनाए रखने के लिए कठिन होगा। आप ग्राहकों को REST इंटरफ़ेस का दस्तावेज़ कैसे देंगे? यदि आप JSON चाहते हैं तो क्या होगा? आदि
चेसो

6

आपको कुछ और की आवश्यकता होगी जो एक WCF सेवा के साथ बातचीत करने के लिए एक HTTP अनुरोध आपके WCF सेवा का एक REST इंटरफ़ेस है। या तो एक SOAP वेब सेवा API की तलाश करें जो Android पर चलती हो या आपकी सेवा को RESTful बनाती हो। WCF REST सेवाओं को करने के लिए आपको .NET 3.5 SP1 की आवश्यकता होगी:

http://msdn.microsoft.com/en-us/netframework/dd547388.aspx


4

अपने हाल के अनुभव से मैं कोसप लाइब्रेरी को एक साबुन WCF सेवा का उपभोग करने की सलाह दूंगा , यह वास्तव में बहुत आसान है, यह और थ्रेड धागा migh आपकी भी मदद करते हैं।


ksoap XML का उपयोग करता है और REST को इस तरह के संचालन के लिए अनुशंसित किया जाता है।
श्रीकांत करुमनघाट

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