Я только что заполнил приложение для Android о wsdl, у меня есть несколько советов, которые нужно добавить:
1. Наиболее важный ресурс - www.wsdl2code.com
2.Вы можете взять имя пользователя и пароль с заголовком, который закодирован с помощью Base64, например:
String USERNAME = "yourUsername";
String PASSWORD = "yourPassWord";
StringBuffer auth = new StringBuffer(USERNAME);
auth.append(':').append(PASSWORD);
byte[] raw = auth.toString().getBytes();
auth.setLength(0);
auth.append("Basic ");
org.kobjects.base64.Base64.encode(raw, 0, raw.length, auth);
List headers = new ArrayList();
headers.add(new HeaderProperty("Authorization", auth.toString())); // "Basic V1M6"));
Vectordianzhan response = bydWs.getDianzhans(headers);
3. Иногда, вы не уверены, что либо код ANDROID, либо веб-сервер неверен, тогда отладка важна. в примере, перехватив «XmlPullParserException», зарегистрируйте «requestDump» и «responseDump» в исключении. Кроме того, вы должны перехватить IP-пакет с помощью adb.
try {
Logg.i(TAG, "2 ");
Object response = androidHttpTransport.call(SOAP_ACTION, envelope, headers);
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "3");
} catch (IOException e) {
Logg.i(TAG, "IOException");
}
catch (XmlPullParserException e) {
Logg.i(TAG, "requestDump: " + androidHttpTransport.requestDump);
Logg.i(TAG, "responseDump: "+ androidHttpTransport.responseDump);
Logg.i(TAG, "XmlPullParserException");
e.printStackTrace();
}
Я видел это много раз в прошлом. По сути, происходит то, что код, который вы отлаживаете, не соответствует коду, который вы видите.
Я не знаю, чем это вызвано, и решение следует руководящим принципам карго-культа.
Я предполагаю, что при развертывании происходит что-то странное, поэтому pdb не синхронизирован с реальным кодом. Если вы используете ведение журнала вместо отладчика, чтобы понять, что происходит, я подозреваю, что вы увидите более разумное поведение. Я сомневаюсь, что сама среда CLR ведет себя странно с «если» - гораздо более вероятно, что это несогласованность отладчика / времени выполнения.
Я думаю, это похоже на тот случай, когда диапазоны шагов отладки просто отключены. Не всегда можно доверять желтой подсветке в отладчике. На самом деле вы не вмешиваетесь. В более ранних бета-версиях F # у нас было много подобных ошибок, когда желтая подсветка прыгала, как сумасшедшая. Подсветка отладчика в основном зависит от того, что компилятор записывает в файл .pdb в качестве «исходного диапазона», который соответствует конкретному скомпилированному набору инструкций.
Какая это версия VS / C #?
EDIT Видя ответы других, действительно, вероятная причина в том, что ваш файл .pdb не синхронизирован с вашей .dll.
Неделю назад у меня была точно такая же проблема. Также есть VS2008, последний SP. Приложение WinForms. Значение было ложным, но if
тело всегда выполнялось. Я проводил те же расследования, что и в вашем видео. Вот мой фрагмент кода:
if (CurrentFileFormatVersion > int.Parse(metaInfo.SimulationFileVersion))
throw new SimulationFormatException(ws, ss);
Работать без отладчика, скомпилированного как Release, было нормально. Попробуйте.
Я полагаю, в отладчике VS2008 есть ошибка. Как-то воспроизводимо с ключевыми словами if и throw.
РЕДАКТИРОВАТЬ: слово «выполнено» выше, конечно, неверно. Вместо этого следует использовать «Выполнен, но не выполнен».
Я видел похожий случай давным-давно, в Delphi, поэтому мой вопрос: компилируете ли вы для выпуска или отладки, с оптимизацией или без?
Причина, по которой я Я спрашиваю, что однажды во время сеанса отладки я обнаружил небольшую процедуру, состоящую из 4-5 строк кода, которая, согласно отладчику, выполнялась в обратном порядке.
В основном, со следующим типом код:
procedure Test;
begin
Line1;
Line2;
Line3;
line4;
end;
Порядок выполнения, согласно отладчику, был следующим:
procedure Test;
begin start -+
Line1; | +-> here -+
Line2; | +-> here -+ |
Line3; | +-> here -+ |
line4; +-> here -+ |
end; +-> end
Причина заключалась в том, что между строками отсутствовали побочные эффекты, поэтому компилятор «оптимизировал» код, переписав его, фактически изменив порядок код должен выполняться полностью в обратном порядке.
Итак, у вас есть оператор throw ниже, который на самом деле выполняется,но компилятор показывает это как тот, с которым у вас возникли проблемы, потому что из-за перестановки кода два оператора throw на самом деле генерируются только один раз как исполняемый код?
Примечание : У меня нет причин знать что это то, что делает Visual Studio, но именно об этом я подумал, когда увидел ваше видео.
Просто добавляю "я тоже" на фанковой подсветке кода. Я запускаю VS2008 с C#. У меня есть проект Windows Forms, ссылающийся на библиотеку классов в другом проекте, и я отлаживаю оба проекта построчно. "В какой-то момент" желтая подсветка в отладке была где-то от 14 до 20 строк от реальной выполняемой строки.
Я закрыл VS, открыл каталоги для обоих проектов, удалил все из bin/Debug и obj/Debug в обоих каталогах, затем перезапустил VS. После перекомпиляции и перехода через отладку все снова было в порядке.
Я не знаю, была ли проблема в .манифесте, .pdb, или, возможно, в .Cache-файле. Это не имеет значения. Сдуйте все и все будет в порядке.
FWIW, Гуглинг был почти бесполезен, за исключением того, что он вернул эту SO нить. Все остальные хиты были о проблемах с шаблонами VC++ и VS2005, где SP исправил эту проблему. Это не та же самая проблема.