Клиентский PHP, вызывающий .NET webservice, сохраняет информацию о сеансе - PullRequest
0 голосов
/ 03 марта 2012

Я рассматриваю PHP-клиент (у меня уже есть клиент C #) в качестве доказательства концепции.Клиент PHP будет подключаться к тому же серверу .NET с использованием SOAP.В качестве примера я использую игру блэкджек.

Теперь сначала клиент C # работает идеально, но в PHP есть проблема.После большой отладки я обнаружил, что PHP всегда использует новое соединение для каждого вызова удаленного сервера.Это делает невозможным программирование игры.

Например, у меня есть файл PHP, который просто настраивает клиента следующим образом (client.php):

try {
    $client = @new soapClient("http://localhost:8000/BlackJack/Service?wsdl",
        array(
            "trace" => 1,
            "exceptions" => 0,
            "cache_wsdl" => 0)
        );

} catch (Exception $e) {
    print 'Caught exception: ' . $e->getMessage() . "\n";

}

Затем в моем главномфайл (я буду использовать вызовы jQuery и ajax для его динамической загрузки, но сейчас я просто тестирую) У меня есть следующий код (blackJackClient.php):

require_once("client.php");
$ini = ini_set("soap.wsdl_cache_enabled","0");
$BetAmountPost = 100;
    print_r($result = $client->buttonDeal_Click(array("BetAmount" => (string)$BetAmountPost))->buttonDeal_ClickResult);
    print_r($result = $client->PlayerMoney()->PlayerMoneyResult);

Первый вызов запустит новую игру (Deal)и игрок получает сумму своей ставки (например, 100) из общей суммы (1000).Так что мне возвращают в результате деньги = 900.

Следующий коммандос спросит, какие деньги у меня сейчас есть, и кто-то ожидает получить 900, но нет, вместо этого у меня есть 1000 (моя стартовая сумма).

Итак, мой вопрос: как я могу сделать так, чтобы все вызовы выполнялись за 1 сеанс, чтобы мы все равно использовали одно и то же соединение?

Спасибо!

1 Ответ

1 голос
/ 05 марта 2012

Поскольку SOAP использует протокол HTTP, а HTTP не имеет состояния, нет способа сохранить ваше соединение открытым во время сеанса игры.Вместо этого вы должны отправлять аутентификацию вашего пользователя при каждом запросе к серверу.

...