Android应用程序不会返回VB.NET WCF服务的结果

时间:2010-12-01 23:13:48

标签: .net android vb.net wcf json

这是我的WCF服务器代码(VB.NET)......

Service1.svc

Public Class Service1
Implements IService1

Public Sub New()
End Sub

Public Function GetText() As String Implements IService1.GetText
    Return String.Format("YO MTV ROCKS!")
End Function

Public Function GetData(ByVal value As Integer) As String Implements IService1.GetData
    Return String.Format("You entered: {0}", value)
End Function

Public Function GetDataUsingDataContract(ByVal composite As CompositeType) As CompositeType Implements IService1.GetDataUsingDataContract
    If composite Is Nothing Then
        Throw New ArgumentNullException("composite")
    End If
    If composite.BoolValue Then
        composite.StringValue &= "Suffix"
    End If
    Return composite
End Function

End Class

IService1.vb

' NOTE: You can use the "Rename" command on the context menu to change the interface 

name "IService1" in both code and config file together.
<ServiceContract()>
Public Interface IService1
<OperationContract()> _
<WebGet(UriTemplate:="GetText", BodyStyle:=WebMessageBodyStyle.WrappedRequest, responseformat:=WebMessageFormat.Json, RequestFormat:=WebMessageFormat.Json)> _
Function GetText() As String

<OperationContract()> _
<WebGet(UriTemplate:="GetData?v={value}", responseformat:=WebMessageFormat.Json)> _
Function GetData(ByVal value As Integer) As String

<OperationContract()>
Function GetDataUsingDataContract(ByVal composite As CompositeType) As CompositeType

' TODO: Add your service operations here

End Interface

' Use a data contract as illustrated in the sample below to add composite types to service operations.

<DataContract()>
Public Class CompositeType

<DataMember()>
Public Property BoolValue() As Boolean

<DataMember()>
Public Property StringValue() As String

结束班

的Web.config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
      <customErrors mode="Off"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
        <endpointBehaviors>
            <behavior name="httpBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
        <service name="HttpWcfWeb.VehicleService">
            <endpoint address=""
                behaviorConfiguration="httpBehavior"
                binding="webHttpBinding"
                contract="HttpWcfWeb.IVehicleService" />
        </service>
    </services>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

这是我的Android客户端代码......

public static final String _URL = "http://192.168.212.37:8080/Service1.svc";
protected void logIn(){


    try
    {


// Send GET request to <service>/GetText
   HttpGet request = new HttpGet(_URL + "/GetText");
   request.setHeader("Accept", "application/json");
   request.setHeader("Content-type", "application/json");

   DefaultHttpClient httpClient = new DefaultHttpClient();
   HttpResponse response = httpClient.execute(request);
   HttpEntity responseEntity = response.getEntity();

   // Read response data into buffer
   long intCount = responseEntity.getContentLength();
     char[] buffer = new char[(int)responseEntity.getContentLength()];
     InputStream stream = responseEntity.getContent();
     InputStreamReader reader = new InputStreamReader(stream);
     reader.read(buffer);
     stream.close();

     tvStatus.append("response: ");
     JSONArray plates = new JSONArray(new String(buffer));

     for (int i = 0; i < plates.length(); ++i) {
      tvStatus.append(plates.getString(i));
     }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

由于一些未知的原因,我可以运行VS 2010客户端测试,并且WCF主机可以正常工作。上面的代码只返回任何内容(它应该返回一个字符串)

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

我不确定Android(还没有从Android做过任何WCF的东西)但是当我从javascript访问我们的一些WCF服务时,我必须专门将方法的输出转换为JSON,然后再将其发送回javascript或JS将不会得到任何回报。

我想知道这可能是这种情况吗?尝试返回格式正确的JSON对象吗?