2017-11-05 2 views
0

Ich schreibe einen einfachen WCF Restful Webdienst in C#, um einen Wert gegen einige Parameter zu erhalten. Hier ist mein IService Code:Verbrauchen WCF Restful Service in Android durch HttpUrConnection, Geting Fehler 405-Methode nicht zulässig

[OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped)] 
    string GetURL(string pVr); 

Und das ist der Code für Service.svc

public string GetURL(string pVr) 
    { 
     try 
     { 
      string VersionCode = ConfigurationManager.AppSettings["MobAppVersionCode"]; 
      if (Convert.ToInt32(VersionCode) > Convert.ToInt32(pVr)) 
      { 
       return "http://xxx.xxx.xxx.xxx/abc.apk"; 
      } 
      else 
      { 
       return "No apk available"; 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

und einer meiner Zweck, wenn ich diesen Web-Service veröffentlichen wird in IIS die Methode ausgeblendet werden sollen (nicht mehr Ruhe oder Hilfeseite oder wsdl), so dass ich den Web-Config geändert und wie dies

<behaviors> 
    <serviceBehaviors> 
    <behavior name="SEILServiceBehaviour"> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" httpHelpPageEnabled="false" httpsHelpPageEnabled="false" /> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="web"> 
     <webHttp helpEnabled="false"/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 

Sie nun, nachdem Sie diesen Web-Dienst in IIS veröffentlichen i leicht den Service Ergebnis durch Postbote sehen oder durch Webbrowser, oder sogar ich kann die Daten durch Retrofit2 android Bibliothek holen. aber wenn ich diesen Web-Service mit meinem HttpUrlConnection-Code verbunden bin, zeigt es mir den Fehler 405-Method Not Allowed. Hier ist der Code meiner Verbindung Seite

public void onRequest(String urlParameters) { 
    try { 
     //Establishing connection with particular url 
     URL url = new URL("http://xxx.xxx.xxx.xxx/Service.svc/GetURL"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     //Setting connection timeout 
     connection.setReadTimeout(30000); 
     connection.setConnectTimeout(30000); 
     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length)); 
     connection.setRequestProperty("Content-Language", "en-US"); 
     connection.setUseCaches(false); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 

     InputStream inputStream; 

     int status = connection.getResponseCode(); 

     if (status != HttpURLConnection.HTTP_OK) 
      inputStream = connection.getErrorStream(); 
     else 
      inputStream = connection.getInputStream(); 

     BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); 
     String line; 
     StringBuilder response = new StringBuilder(); 
     while ((line = rd.readLine()) != null) { 
      response.append(line); 
      response.append('\r'); 
     } 
     rd.close(); 

     if (url.getHost().equals(connection.getURL().getHost())) { 
      urlReceive = response.toString().trim(); 
     } else { 
      urlReceive = "Internet Login Required"; 
     } 
    } catch (IOException e) { 
     urlReceive = "Connection Timed Out"; 
    } 
} 

Bitte helfen Sie mir

+0

Ich benutzte GET im Postboten. Und hat das perfekte Ergebnis. In Androiden Retrofit habe ich auch das perfekte Ergebnis (auf keine Notwendigkeit, irgendwelche GET oder POST zu verwenden) – MaAc

+0

Ya können wir nicht in Android-Code verwenden, weil ich einige Parameter gegen den Web-Service, so dass ich etwas Wert bekommen kann. Aber ich habe auch versucht, in Android-Seite zu bekommen. Es wird mir Fehler geben, GET ist hier nicht erlaubt. – MaAc

+0

Ya, wenn ich diese API als Post in Post-Mann traf, wird es die 405-Methode Fehler nicht erlaubt bekommen. Das heißt, ich muss GET auch vom mobilen Ende aus anrufen. Aber keine Ahnung, wie man das macht. – MaAc

Antwort

1

Ihre Anfrage ein GET sein muss, wie pro:

[WebInvoke(Method = "GET", 

Sie verwenden einen POST:

connection.setRequestMethod("POST"); 

Sie müssen Ihren Code ändern, um GET reque zu verwenden st statt einer POST.

+0

Ja, ich habe es geändert. Ich war verwirrt, nur weil ich einige Parameter dazu hatte – MaAc