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
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
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
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