【发布时间】:2014-01-18 11:31:15
【问题描述】:
我正在尝试从 Android 应用程序向 WCF 服务发送数据,但不知何故,该服务似乎没有通过 android 调用。我通过 LOGCAT 中的 adnroid 收到了一个 STATUSCODE 值 = 500(这意味着内部服务器错误)我浏览了源代码 100 次,但没有找出错误。并且几乎检查了与我的问题相关的所有帖子,但仍然没有得到任何解决方案。
这是代码
安卓代码:
private class sendPostData extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
HttpPost request = new HttpPost( LOGIN_SERVICE_URL + "/MyCar");
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
JSONStringer getCarInfo;
try {
getCarInfo = new JSONStringer()
.object()
.key("myCar")
.object()
.key("Name").value(edt_carName.getText().toString())
.key("Make").value(edt_carMake.getText().toString())
.key("Model").value(edt_carModel.getText().toString())
.endObject()
.endObject();
StringEntity entity = new StringEntity(getCarInfo.toString());
request.setEntity(entity);
// Send request to WCF service
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
Log.d("WebInvoke", "Saving : " + response.getStatusLine().getStatusCode());
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
txt_verif.setText("Success");
}
}
除了调用 WCF 服务外,在 android 代码中一切正常。我多次调试代码并收到 statuscode = 500
这里是 WCF 服务
Service.cs
public class Service1 : IService1
{
public void UpdateMyCar(myCar myCar) {
string strConnectionString = ConfigurationManager.ConnectionStrings["Database1"].ConnectionString;
SqlConnection conn = new SqlConnection(strConnectionString);
conn.Open();
using (SqlCommand cmd = new SqlCommand("Insert into TestingTable (Name,Make,Model) Values (@Name,@Make,@Model)", conn)) {
cmd.Parameters.AddWithValue("@Name", myCar.Name);
cmd.Parameters.AddWithValue("@Make", myCar.Make);
cmd.Parameters.AddWithValue("@Model", myCar.Model);
int queryResult = cmd.ExecuteNonQuery();
} conn.Close();
}
LogCat
WebInvoke Saving : 500
IService1.svc
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "MyCar",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json)]
void UpdateMyCar(myCar myCar);
}
[DataContract]
public class myCar
{
[DataMember(Name="Name")]
public string Name
{
get;
set;
}
[DataMember(Name="Model")]
public string Model
{
get;
set;
}
[DataMember(Name="Make")]
public string Make
{
get;
set;
}
Web.Config
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true" targetFramework="4.0">
</compilation>
<authentication mode="Windows"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
<system.serviceModel>
<services>
<service name="CarSercive.Service1" behaviorConfiguration="CarSercive.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="webHttpBinding" contract="CarSercive.IService1">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarSercive.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
此服务也在 IIS 上发布。我还使用 google chrome 扩展程序检查了该服务 SIMPLE REST CLIENT 并收到了内部服务器错误
【问题讨论】:
-
SIMPLE REST CLIENT 在响应正文中显示什么? WCF 会告诉您错误详细信息,我们需要该信息。
-
感谢您的回复。由于 EndpointDispatcher 的 AddressFilter 不匹配,我收到此 localhost:8259/Service1.svc/MyCar' 无法在接收方处理。检查发送方和接收方的 EndpointAddresses 是否一致
-
@GregEnnis 我在 web.config 文件中找到了一些机会。我将 Binding = "webHttpBinding" 更改为 "wsHttpBinding" 所以 statuscode 已更改为 415
-
您是否考虑过使用 Web API 代替 WCF?这更容易配置。状态 415 表示不支持的媒体类型 (json)
-
不,我没有考虑任何 Web API。但我的 WCF 服务 RequestFormat = WebMessageFormat.Json 也在 JSON 中
标签: c# android asp.net wcf web-services