我正在围绕 SOAP API 编写一个包装器。我在 VS2010 中设置了一个指向 WSDL 的服务引用。当我调用登录时,API 在 cookie 中返回一个会话变量。
我在配置中的绑定上设置了 allowCookies="true"。
到目前为止,我已经在我的包装器中实现了两个 API 调用:login和logout。
我有一个测试工具,它是一个简单的 ASP.NET 应用程序,它有一个用于login的页面和一个用于logout的页面。
提交登录时:
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 都会被清除。但事实并非如此。
注销方法的实现方式类似。如果您尝试在未登录的情况下注销,则注销API 调用将引发异常。奇怪的是,当我转到注销页面并提交时(这反过来又构建了一个新的包装客户端,因此构建了一个新的服务客户端),它认识到我已登录。如果我再次尝试注销,它会按预期抛出异常。
cookie 似乎在起作用,即使在每个页面上同时构建新的接口客户端和新的包装器客户端时,cookie 仍然存在。
虽然这不是一件坏事,但我对它的工作方式感到困惑。ASP.NET/WCF 是否在某个地方为会话保存了这些 cookie?这将如何在控制台应用程序中工作?