Java Android应用无法访问WCF Rest服务

时间:2015-08-24 06:48:49

标签: java c# android eclipse wcf

我有一个使用eclipse编写的基本java安卓应用程序。我在设备而不是模拟器上测试它(太慢)。 MainActivity目前只访问WCF网址(下面的代码)。 WCF服务是一个简单的GET方法,它托管在IIS上。我可以使用下面给出的url从firefox访问服务方法。我暂时关闭了防火墙。在命令netstat -an上我可以看到:

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

我的问题是虽然可以从浏览器访问该服务,但我无法从该应用程序进行连接。它保持超时。

我已尝试过localhost,10.0.2.2以及我的lan ip。

我的代码是:

MainActivity

URL url = new URL("http://10.0.2.2:8080/tst/Service1.svc/getMsg/kkk");
    urlConnection = (HttpURLConnection) url.openConnection();
    urlConnection.setDoOutput(true);   
    urlConnection.setRequestMethod("GET");  
    urlConnection.setUseCaches(false);  
    urlConnection.setConnectTimeout(10000);  
    urlConnection.setReadTimeout(10000);  
    urlConnection.setRequestProperty("Content-Type","application/json");   

    urlConnection.setRequestProperty("Host", "10.0.2.2:8080");
    urlConnection.connect();  
     int HttpResult =urlConnection.getResponseCode();  
    if(HttpResult ==HttpURLConnection.HTTP_OK)
    {  
    ....

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.secondprj"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"/>
<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="23" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

</application>

</manifest>

服务代码

public class Service1 : IService1
{
    public string GetMessage(String name)
    {
        return "abc " + name;
    }
    ...

我已将其部署在IIS中的文件夹'tst'下。

Web.config是:

<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
 <services>
  <service
      name="WcfService1.Service1"
     >
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8080/"/>
      </baseAddresses>
    </host>
    <endpoint address=""
              binding="webHttpBinding"
              contract="WcfService1.IService1" 
              behaviorConfiguration="web"/>

  </service>
 </services>
 <behaviors>
  <serviceBehaviors>
    <behavior name="MyServiceBehavior">
      <serviceMetadata httpGetEnabled="false"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
    <behavior>
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>

      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
 <endpointBehaviors>
  <behavior name="web" >
    <webHttp/>
  </behavior>
 </endpointBehaviors> 
 </behaviors>
 <protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
 </protocolMapping>    
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"  multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>

<directoryBrowse enabled="true"/>
</system.webServer>

</configuration>

接口

namespace WcfService1
{
[ServiceContract]

public interface IService1
{
    [OperationContract]
   //[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
   // ResponseFormat = WebMessageFormat.Json,
   //UriTemplate = "getMsg")]
    [WebInvoke(Method = "GET",   
    ResponseFormat = WebMessageFormat.Json,
    UriTemplate = "getMsg/{name}")]
    string GetMessage(string name);
}
}

请查看代码,如果我犯了一些错误,请告诉我。后来我想使用POST而不是GET

EDIT ::: 我已经使用浏览器的调用调试了wcf。在调试中似乎没有问题。我希望在IIs上安装wcf时进行调试。我该怎么办?此外,对WCF的调用来自Android应用程序。来电时fiddler没有显示任何新项目。如果任何人使用此工具拦截来自Android应用程序的请求,请帮助...

EDIT2 :: 尝试更改wcf服务的端口。现在获得405响应。请提出你的建议!

0 个答案:

没有答案