1

我正在围绕 SOAP API 编写一个包装器。我在 VS2010 中设置了一个指向 WSDL 的服务引用。当我调用登录时,API 在 cookie 中返回一个会话变量。

我在配置中的绑定上设置了 allowCookies="true"

到目前为止,我已经在我的包装器中实现了两个 API 调用:loginlogout

我有一个测试工具,它是一个简单的 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?这将如何在控制台应用程序中工作?

4

0 回答 0