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