如何使用 Android 使用 WCF Rest 服务
Posted
技术标签:
【中文标题】如何使用 Android 使用 WCF Rest 服务【英文标题】:How to Consume WCF Rest Service with Android 【发布时间】:2012-09-26 12:04:12 【问题描述】:这里是代码 sn-p,我在其中连接到我的 WCF 服务。
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(EMPLOYEE_LOG_IN);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if(entity.getContentLength() != 0)
Reader employeeReader = new InputStreamReader(response.getEntity().getContent());
//create a buffer to fill if from reader
char[] buffer = new char[(int) response.getEntity().getContentLength()];
//fill the buffer by the help of reader
employeeReader.read(buffer);
//close the reader streams
employeeReader.close();
//for the employee json object
JSONObject employee = new JSONObject(new String(buffer));
Log.d("Response",employee.getString("FirstName"));
它在不同的情况下表现不同。 这是我的 WCF 服务中的代码
public Controller GetEmployees(int personalNUmber)
return new Controller
EmployeeId = 1,
FirstName = "FirstName",
LastName = "LastName"
;
所以当我调用这个方法时一切正常,我得到了 json 格式,但是当我 编辑我的方法并像这样连接到实体数据库
FineReceiptsTestEntities _entity = new FineReceiptsTestEntities();
var t = _entity.Employees.FirstOrDefault(x => x.EmployeeID == personalNUmber);
return new Controller
EmployeeId = 1,
FirstName = t != null ? t.Name : " ",
LastName = "LastName"
;
Json 对象没有返回。只返回带有 error 的 html 内容,像这样
服务器在处理请求时遇到错误。请参阅 用于构造对服务的有效请求的服务帮助页面。
但是浏览器中的这两种方法都可以正常工作并返回相关数据。
这是我的 web.config
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
<system.serviceModel>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint helpEnabled="true" automaticFormatSelectionEnabled="true" />
</webHttpEndpoint>
</standardEndpoints>
<services>
<service name="dev_FineReceiptsService.ControllersInfo">
<endpoint kind="webHttpEndpoint" contract="dev_FineReceiptsService.IControllersInfo" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
<connectionStrings>
<add name="FineReceiptsTestEntities" connectionString="metadata=res://*/FineTest.csdl|res://*/FineTest.ssdl|res://*/FineTest.msl;provider=System.Data.SqlClient;provider connection string="Data Source=msdev01;Initial Catalog=FineReceiptsTest;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
那么谁能告诉我使用Entity检索数据时有什么问题?
【问题讨论】:
我使用了这个示例wyousuf.wordpress.com/2012/03/01/android-with-wcf-services/… 并且工作正常,但是当我尝试使用实体框架检索数据时不起作用。请帮助,如何在 Android 中使用实体框架检索数据。 【参考方案1】:您的帖子中没有足够的信息来确定原因。您必须发布 RAW HTTP 响应以供任何人帮助。服务器可能返回 HTTP 415,因为您没有正确构造请求。
request.setHeader("Content-type", "application/json");
您正在将 GET 请求的内容类型设置为 json。这是不可能的。服务器可能会尝试匹配它并感到困惑。也可能是服务器在请求中有真正的 HTTP 500 错误。从构造响应错误的方式来看,服务似乎在抱怨请求本身无效。
server encountered an error processing the request.Please see the service help page for constructing valid requests to the service.
【讨论】:
以上是关于如何使用 Android 使用 WCF Rest 服务的主要内容,如果未能解决你的问题,请参考以下文章
Android将文件作为ByteArray上传到WCF REST服务