这是我的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主机可以正常工作。上面的代码只返回任何内容(它应该返回一个字符串)
关于我做错的任何想法?
答案 0 :(得分:1)
我不确定Android(还没有从Android做过任何WCF的东西)但是当我从javascript访问我们的一些WCF服务时,我必须专门将方法的输出转换为JSON,然后再将其发送回javascript或JS将不会得到任何回报。
我想知道这可能是这种情况吗?尝试返回格式正确的JSON对象吗?