2

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

しかし、それも違いはありませんでした。

これに関するヘルプは大歓迎です。ありがとうございました!

4

1 に答える 1