正在尝试将Android应用程序连接到.NET;。svc“;不支持Web服务和服务器响应媒体类型
我正在尝试将Android应用程序连接到扩展名为.svc的Axapta web服务。 我正在使用KSOAP2.5.4 jar和所有依赖项。下面是代码。 我无法连接到web服务,因为响应转储指示服务器不支持该媒体类型正在尝试将Android应用程序连接到.NET;。svc“;不支持Web服务和服务器响应媒体类型,.net,android,web-services,.net,Android,Web Services,我正在尝试将Android应用程序连接到扩展名为.svc的Axapta web服务。 我正在使用KSOAP2.5.4 jar和所有依赖项。下面是代码。 我无法连接到web服务,因为响应转储指示服务器不支持该媒体类型 网络服务: 从Windows Phone连接时正常启动和运行 代码: import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serializati
网络服务: 从Windows Phone连接时正常启动和运行
代码:
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.transport.ServiceConnection;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class SoapActivity extends Activity {
private static String mSOAPACTION="http://schemas.microsoft.com/dynamics/2008/01/services/LocalEndpointService/read",
mOPERATIONNAME="read",
WSDL_TARGET_NAMESPACE = "http://schemas.microsoft.com/dynamics/2008/01/services/";
private static String mNAMESPACE="http://schemas.microsoft.com/dynamics/2008/01/services/";
private static String mMETHODNAME="read";
private static String mURL="http://192.168.100.188/MicrosoftDynamicsAXAif50/localendpointservice.svc?wsdl";
private SoapPrimitive result = null;
public static Context context=null;
private HttpTransportSE httpTransportSE = null;
private TextView tv = null;
public void onCreate(Bundle savedInstanceState){
SoapSerializationEnvelope envelope = null;
SoapObject Request = null;
ServiceConnection sc = null;
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
try {
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.setAddAdornments(false);
envelope.encodingStyle = SoapSerializationEnvelope.ENC;
envelope.env=SoapSerializationEnvelope.ENV;
envelope.implicitTypes = true;
Request = new SoapObject(mNAMESPACE, mMETHODNAME);
//Request = new SoapObject(mNAMESPACE, mOPERATIONNAME);
//Request.addProperty("LocalEndpointServiceReadRequest", "Qing");
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);
//envelope.addMapping(mNAMESPACE, "UserCredentials",new UserCredendtials().getClass());
/*androidHttpTransport = new AndroidHttpTransport(mURL);
androidHttpTransport.debug = true;
androidHttpTransport.call(mSOAPACTION, envelope);*/
httpTransportSE = new HttpTransportSE(mURL);
/*sc = httpTransportSE.getConnection();
if(sc!=null){
sc.setRequestProperty("Content-Type", "text/xml");
}else{
Log.i(getClass().getSimpleName(),"SC : null.");
}*/
httpTransportSE.debug = true;
//httpTransportSE.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
httpTransportSE.call(mSOAPACTION, envelope);
Object response = envelope.getResponse();
tv.setText(response.toString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
Log.i(getClass().getSimpleName(),"requestDump : "+httpTransportSE.requestDump);
Log.i(getClass().getSimpleName(),"responseDump : "+httpTransportSE.responseDump);
}
}
}
import org.ksoap2.SoapEnvelope;
导入org.ksoap2.serialization.SoapObject;
导入org.ksoap2.serialization.SoapPrimitive;
导入org.ksoap2.serialization.SoapSerializationEnvelope;
导入org.ksoap2.transport.HttpTransportSE;
导入org.ksoap2.transport.ServiceConnection;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.TextView;
公共类SoapActivity扩展了活动{
私有静态字符串mSOAPACTION=”http://schemas.microsoft.com/dynamics/2008/01/services/LocalEndpointService/read",
mOPERATIONNAME=“读取”,
WSDL_目标_命名空间=”http://schemas.microsoft.com/dynamics/2008/01/services/";
私有静态字符串mNAMESPACE=”http://schemas.microsoft.com/dynamics/2008/01/services/";
私有静态字符串mMETHODNAME=“read”;
私有静态字符串mURL=”http://192.168.100.188/MicrosoftDynamicsAXAif50/localendpointservice.svc?wsdl";
private SoapPrimitive result=null;
公共静态上下文=null;
私有HttpTransportSE HttpTransportSE=null;
私有文本视图tv=null;
创建时的公共void(Bundle savedInstanceState){
SoapSerializationEnvelope=null;
SoapObject请求=null;
ServiceConnection sc=null;
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv=(TextView)findviewbyd(R.id.tv);
试一试{
信封=新的SoapSerializationEnvelope(SoapEnvelope.VER12);
信封.装饰(假);
envelope.encodingStyle=SoapSerializationEnvelope.ENC;
envelope.env=SoapSerializationEnvelope.env;
envelope.implicitTypes=true;
请求=新的SoapObject(mNAMESPACE,mMETHODNAME);
//请求=新的SoapObject(mNAMESPACE,mOPERATIONNAME);
//addProperty(“LocalEndpointServiceReadRequest”,“Qing”);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
//addMapping(mNAMESPACE,“UserCredentials”,newusercredendtials().getClass());
/*androidHttpTransport=新androidHttpTransport(mURL);
androidHttpTransport.debug=true;
androidHttpTransport.call(mSOAPACTION,信封)*/
httpTransportSE=新的httpTransportSE(mURL);
/*sc=httpTransportSE.getConnection();
如果(sc!=null){
sc.setRequestProperty(“内容类型”、“文本/xml”);
}否则{
Log.i(getClass().getSimpleName(),“SC:null.”);
}*/
httpTransportSE.debug=true;
//httpTransportSE.setXmlVersionTag(“”);
httpTransportSE.call(mSOAPACTION,信封);
对象响应=envelope.getResponse();
tv.setText(response.toString());
}捕获(例外e){
//TODO:处理异常
e、 printStackTrace();
}最后{
Log.i(getClass().getSimpleName(),“requestDump:”+httpTransportSE.requestDump);
Log.i(getClass().getSimpleName(),“responseDump:”+httpTransportSE.responseDump);
}
}
}
请求转储:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://www.w3.org/2001/12/soap-encoding"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<read xmlns="http://schemas.microsoft.com/dynamics/2008/01/services/" />
</v:Body>
</v:Envelope>
响应mp:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://www.w3.org/2001/12/soap-encoding"
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<read xmlns="http://schemas.microsoft.com/dynamics/2008/01/services/" />
</v:Body>
</v:Envelope>
服务器无法为该请求提供服务,因为该媒体类型不受支持
注意:我更新了代码,因为我发现web服务是Soap版本1.2。我认为当前的问题在于URL。服务的URL不是:
http://192.168.100.188/MicrosoftDynamicsAXAif50/localendpointservice.svc?wsdl
这是服务描述的URL(WSDL文件),它只接受HTTP GET请求(所有对WCF服务的SOAP请求都是HTTP POST)。您的评论请求表明您正试图将请求发布到此URL-它将始终失败。服务的URL没有?wsdl
查询字符串:
http://192.168.100.188/MicrosoftDynamicsAXAif50/localendpointservice.svc
您确定服务正在使用SOAP 1.1吗?您是否尝试过在SOAP调试器中查看输出以确保它正在发送有效的SOAP消息?如果您没有使用一个已经存在的请求转储显示soap请求(soap消息)和响应转储显示服务器响应,请查看soap工具列表的链接。我遵循了ksoap示例,并给出了SoapEnvelope。VER12您能否建议如何在soap 1.2中执行请求,因为我正在连接到soap 1.2 web服务。谢谢你的建议。对不起,这是错误的-我没有注意到你已经改变了这个例子。因此,如果使用
VER12
以及VER11
,您会得到相同的错误?如果您不能通过HTTP请求,那么两个版本的内容类型是什么?谢谢,但它不会更改输出。即使删除wsdl,输出仍然保持不变?Axapta配置中是否存在任何问题?因为我已经用示例Java Soap 1.2 Axis web服务测试了这个实现,它运行良好。在这种情况下,您应该使用一些工作客户端,比较工作客户端和服务以及您的客户端和服务之间的HTTP通信。这种客户端是在Wingows 7移动平台上实现的,但它使用的是Business Connector,它使用完全不同的方式来连接Axapta Web服务。Business connector未使用此命名空间、soap操作、url、方法名称等规范。因此,您需要为服务构建简单的java或.net客户端(它可以是调用单个方法的控制台应用程序)以验证其功能。这就是我正在做的事,但找不到它在工作。问题