WCF SOAP サービス (.Net 4) を実装し、Eclipse で Android エミュレーターからサービスを呼び出しています。私のサービスは IIS 7 に Web アプリケーションとして展開されています。Android の Web サービス クライアントは、SOAP メッセージで HTTP POST を実行します。
Android エミュレーターから Eclipse を介して Web サービスを呼び出すと、FileNotFoundException が発生します。エラー入力ストリームにより、次の例外が発生します。
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>
wcftestclient から SOAP Web サービスを呼び出すと、要求は正常に処理されます。また、Android エミュレータ クライアントから Apache 共通 tcpmon を使用すると、SOAP Web サービス リクエストが正常に処理されます。
WCF SOAP Web サービスに直接アクセスするように Android エミュレーターをセットアップした場合にのみ、この例外が発生します。IIS で WCF SOAP Web サービスを Web サイトとして構成し、IP アドレス/ポート ( ) を介してアクセスしていますhttp://<myIPAddress>:<myPortNumber>/MyService.svc?wsdl
。
Android クライアントで次のように HttopURLConnection をセットアップします。
connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
connection.setRequestProperty("SOAPAction", this.getSOAPAction());
connection.setRequestProperty("Host", "base_urlforwebservices like - xyz.net");
connection.setRequestProperty("Accept-Encoding", "None");
connection.setRequestProperty("Connection", "close");
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("User-Agent", "android");
取り出してみましたが、接続プロパティで認証資格情報を設定しようとしましたsetDoOutput(true)
:setDoInput(true)
connection.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(userCredentials.getBytes(), Base64.DEFAULT));
そして、それは何の違いもありませんでした。
Android.manifest ファイルに、次の設定を追加しました。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
しかし、それも違いはありませんでした。
これに関するヘルプは大歓迎です。ありがとうございました!