Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试将Android应用程序连接到.NET;。svc“;不支持Web服务和服务器响应媒体类型_.net_Android_Web Services - Fatal编程技术网

正在尝试将Android应用程序连接到.NET;。svc“;不支持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

我正在尝试将Android应用程序连接到扩展名为.svc的Axapta web服务。 我正在使用KSOAP2.5.4 jar和所有依赖项。下面是代码。 我无法连接到web服务,因为响应转储指示服务器不支持该媒体类型


网络服务:

从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客户端(它可以是调用单个方法的控制台应用程序)以验证其功能。这就是我正在做的事,但找不到它在工作。问题