, Как я могу установить на пути в соответствии со своим корневым каталогом?
mkdir /home/masi/.local
cd Python-2.6.1
make clean
./configure --prefix=/home/masi/.local
make
make install
Тогда выполненное использование:
/home/masi/.local/bin/python
Так же, если у Вас есть сценарии (например, CGI), которые требуют Вашей собственной пользовательской версии Python, который необходимо сказать им явно:
#!/home/masi/.local/bin/python
вместо того, чтобы использовать систему по умолчанию Python, который выберет “#!/usr/bin/env python”.
можно изменить установку PATH для создания просто ввода “python” из консоли выполненным, что версия, но это не поможет для веб-приложений, запускаемых при другом пользователе.
при компиляции чего-то, что связывается с Python (например, mod_wsgi) необходимо сказать его, где найти Python, или он будет использовать систему один вместо этого. Это часто делается что-то как:
./configure --prefix=/home/masi/.local --with-python=/home/masi/.local
Для других находящихся в setup.py расширений как MySQLdb просто необходимо выполнить setup.py сценарий с правильной версией Python:
/home/masi/.local/bin/python setup.py install
Как выглядит ваш .NET Webservice?
У меня был тот же эффект, используя ksoap 2.3 с code.google.com . Я следовал руководству по The Code Project (это отличный BTW.)
И каждый раз, когда я использовал
Integer result = (Integer)envelope.getResponse();
, чтобы получить результат моего веб-сервиса (независимо от типа, я пробовал Object, String , int) Я столкнулся с исключением org.ksoap2.serialization.SoapPrimitive
.
Я нашел решение (обходной путь). Первое, что мне нужно было сделать, это удалить атрибут SoapRpcMethod () из моих методов веб-службы.
[SoapRpcMethod(), WebMethod]
public Object GetInteger1(int i)
{
// android device will throw exception
return 0;
}
[WebMethod]
public Object GetInteger2(int i)
{
// android device will get the value
return 0;
}
Затем я изменил свой код Android на:
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
Однако я получаю объект SoapPrimitive, который имеет закрытое поле «значение». К счастью, значение передается через метод toString ()
, поэтому я использую Integer.parseInt (result.toString ())
, чтобы получить свое значение, которого мне достаточно, потому что я у меня нет сложных типов, которые мне нужно получить от моей веб-службы.
Вот полный источник:
private static final String SOAP_ACTION = "http://tempuri.org/GetInteger2";
private static final String METHOD_NAME = "GetInteger2";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2:4711/Service1.asmx";
public int GetInteger2() throws IOException, XmlPullParserException {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
PropertyInfo pi = new PropertyInfo();
pi.setName("i");
pi.setValue(123);
request.addProperty(pi);
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
return Integer.parseInt(result.toString());
}
Введите тип конверта в SoapPrimitive:
SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
String strRes = result.toString();
, и он будет работать.
Это очень просто. Вы получаете результат в объекте
, который является примитивным.
Ваш код:
Object result = (Object)envelope.getResponse();
Правильный код:
SoapObject result=(SoapObject)envelope.getResponse();
//To get the data.
String resultData=result.getProperty(0).toString();
// 0 is the first object of data.
Я думаю, что это должно определенно работать.