我要在android上往一个C#写的webservice上传图片,service的代码如下: public bool UploadCaseFile(string ServicePwd, string LoginName, string DocCode, string FileName, byte[] b)
{
if (!chkServicePwd(ServicePwd))
{
return false;
}
return Function.UploadCaseFile(LoginName, DocCode, FileName, b);
}我客户端得代码如下: /**
* 上传附件
*
* @param ServicePwd
* @param LoginName
* @param DocCode
* @param FileName
* @param picByte byte类型
* @return
*/
public Boolean upLoadPic(String ServicePwd, String LoginName,
String DocCode, String FileName, byte[] picByte) {
Base64 objbBase64=new Base64();
boolean ret=false;
METHOD_NAME = "UploadCaseFile";
SOAP_ACTION = "http://tempuri.org/UploadCase";
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("ServicePwd", ServicePwd);// 传递需要的参数
rpc.addProperty("LoginName", LoginName);
rpc.addProperty("DocCode", DocCode);
rpc.addProperty("FileName", FileName);
// 将二进制流变成字符串传输
rpc.addProperty("picByte",objbBase64.encodeBytesToBytes(picByte));
// rpc.addProperty("picByte",new SoapPrimitive(SoapEnvelope.ENC,"base64Binary",picByte));
try {
AndroidHttpTransport ht = new AndroidHttpTransport(URL);// 定义连接
ht.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;// 将发送对象序列化
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
new MarshalBase64().register(envelope);
ht.call(SOAP_ACTION, envelope);// 呼叫发送
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();// 进去返回的数据结构
运行到这里就报错。
传递string可以 但是如上一传图片就错
请教怎么处理 啊,急用
{
if (!chkServicePwd(ServicePwd))
{
return false;
}
return Function.UploadCaseFile(LoginName, DocCode, FileName, b);
}我客户端得代码如下: /**
* 上传附件
*
* @param ServicePwd
* @param LoginName
* @param DocCode
* @param FileName
* @param picByte byte类型
* @return
*/
public Boolean upLoadPic(String ServicePwd, String LoginName,
String DocCode, String FileName, byte[] picByte) {
Base64 objbBase64=new Base64();
boolean ret=false;
METHOD_NAME = "UploadCaseFile";
SOAP_ACTION = "http://tempuri.org/UploadCase";
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("ServicePwd", ServicePwd);// 传递需要的参数
rpc.addProperty("LoginName", LoginName);
rpc.addProperty("DocCode", DocCode);
rpc.addProperty("FileName", FileName);
// 将二进制流变成字符串传输
rpc.addProperty("picByte",objbBase64.encodeBytesToBytes(picByte));
// rpc.addProperty("picByte",new SoapPrimitive(SoapEnvelope.ENC,"base64Binary",picByte));
try {
AndroidHttpTransport ht = new AndroidHttpTransport(URL);// 定义连接
ht.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;// 将发送对象序列化
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
new MarshalBase64().register(envelope);
ht.call(SOAP_ACTION, envelope);// 呼叫发送
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();// 进去返回的数据结构
运行到这里就报错。
传递string可以 但是如上一传图片就错
请教怎么处理 啊,急用
不是由String传入的吗?
1, rpc.addProperty("b", picByte);// picByte必须是byte[]类型,怀疑不能传byte[]?放心ksoap会用Base64自动帮你转成String进行传输的,到服务器端自动帮你转会byte[];
2, 服务器上的UploadCaseFile方法最后一个参数该成String str, picByterpc.addProperty("str", Base64().encode(picByte)); 然后用Base64().decode(str)转回byte[].
推荐使用ksoap自带的Base64类.请楼主获得解决方案后及时结贴,这样才能提高大家帮忙回答问题的积极性,谢谢.
public Boolean upLoadPic(String ServicePwd, String LoginName,
String DocCode, String FileName, byte[] b) {
boolean ret = false;
METHOD_NAME = "UploadCaseFile";
SOAP_ACTION = "http://tempuri.org/UploadCaseFile";
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("ServicePwd", ServicePwd);// 传递需要的参数
rpc.addProperty("LoginName", LoginName);
rpc.addProperty("DocCode", DocCode);
rpc.addProperty("FileName", FileName);
rpc.addProperty("b",b);
// 将二进制流变成字符串传输
// String data=new String(android.util.Base64.encodeToString(b, 0));
// rpc.addProperty("b",new SoapPrimitive(SoapEnvelope.ENC,"base64Binary",data));
//rpc.addProperty("imgStr",android.util.Base64.encodeToString(b, 0));
try {
AndroidHttpTransport ht = new AndroidHttpTransport(URL);// 定义连接
ht.debug = true;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.bodyOut = rpc;// 将发送对象序列化
Log.e("信息", "将发送对象序列化");
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
(new MarshalBase64()).register(envelope);
ht.call(SOAP_ACTION, envelope);// 呼叫发送
Log.e("信息", "呼叫发送");
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();// 进去返回的数据结构
Log.e("result信息", result.toString());
return ret; } catch (Exception e) {
e.printStackTrace();
Log.e("信息", e.toString());
return false;
}
有知道原因的吗
// 取值
String xmlInfo = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"
+ "<soap12:Body>"
+ "<UploadCaseFileForAndroid xmlns=\"http://tempuri.org/\">"
+ "<ServicePwd>" + ServicePwd + "</ServicePwd>"
+ "<LoginName>" + LoginName + "</LoginName>" +
"<DocCode>"+ DocCode + "</DocCode>" +
"<FileName>" + FileName+ "</FileName>" +
"<imgStr>" + Base64.encode(b).toString()+ "</imgStr>" +
"</UploadCaseFileForAndroid>"
+ "</soap12:Body></soap12:Envelope>";
// 发送