SOAP API のラッパーを作成しています。VS2010 で WSDL を指すようにサービス参照を設定しました。login を呼び出すと、API はセッション変数を Cookie で返します。
config のバインディングでallowCookies="true"を設定しました。
これまで、ラッパーにloginとlogoutの 2 つの API 呼び出しを実装しました。
login用のページとlogout用のページを持つ単純な ASP.NET アプリケーションであるテスト ハーネスがあります。
ログインが送信されると:
using (var ApiClient = new ApiClient())
{
ApiClient.Login(txtUsername.Text, txtPassword.Text, txtOrganization.Text, txtIPAddress.Text);
}
そして今、私の ApiClient.Login メソッドで:
using (var soapService = new WSDLInterfaceClient())
{
var loginCredentials = new loginRequest
{
username = username,
password = password,
organization = organization
};
if (!string.IsNullOrWhiteSpace(ipAddress))
loginCredentials.ipAddress = ipAddress;
var loginResponse = soapService.Login(loginCredentials);
}
したがって、これはすべて問題なく終了します。usings を削除し、ラッパー内で使用するクラス レベルの WSDLInterfaceClient を用意する必要があると考えていました。新しいクライアントを構築するたびに Cookie が消去されると考えたからです。しかし、そうではありません。
logoutメソッドも同様に実装されています。ログインせずにログアウトしようとすると、ログアウト API 呼び出しで例外がスローされます。奇妙なことに、ログアウトページに移動して送信すると (これにより、新しいラッパー クライアントが構築され、新しいサービス クライアントが構築されます)、それが認識されます。ログインしています。もう一度ログアウトしようとすると、期待どおりに例外がスローされます。
Cookie は、各ページで新しいインターフェイス クライアントと新しいラッパー クライアントの両方を構築する場合でも、Cookie が持続するという点で機能しているようです。
これは悪いことではありませんが、私はそれがどのように機能しているかについて当惑しています。ASP.NET/WCF がセッション用にこれらの Cookie を保存している場所はありますか? これはコンソール アプリでどのように機能しますか?