Вы должны использовать OperationContext, у него есть свойства, которые могут отправлять cookie.
Чтобы включить cookie, вам следует установить для свойства allowcookie значение true в конфигурации привязки.
<bindings>
<basicHttpBinding>
<binding name="AuthSoap" allowCookies="true" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:63599/Auth" binding="basicHttpBinding"
bindingConfiguration="AuthSoap" contract="Auth.AuthSoap" name="AuthSoap" />
</client>
Тогда вы можете вызвать метод входа в систему следующим образом.
Auth.AuthSoapClient authSoapClient = new Auth.AuthSoapClient();
using (new OperationContextScope(authSoapClient.InnerChannel))
{
// please put the call of method in OperationContextScope
authSoapClient.Login("admin", "admin");
// the following code get the set-cookie header passed by server
HttpResponseMessageProperty response = (HttpResponseMessageProperty)
OperationContext.Current.IncomingMessageProperties[
HttpResponseMessageProperty.Name];
string header = response.Headers["Set-Cookie"];
// then you could save it some place
}
После того, как вы получите cookie, вы должны устанавливать его в заголовке каждый раз, когда вызываете ваш метод.
Auth.AuthSoapClient authSoapClient = new Auth.AuthSoapClient();
using (new OperationContextScope(authSoapClient.InnerChannel))
{
//below code sends the cookie back to server
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
request.Headers["Cookie"] = please get the cookie you stored when you successfully logged in
OperationContext.Current.OutgoingMessageProperties[
HttpRequestMessageProperty.Name] = request;
// please put the call of method in OperationContextScope
string msg = authSoapClient.GetMsg();
}
Если вы чувствуете, что отправлять cookie-файлы каждый раз после успешного входа в систему проблематично. Можно использовать MessageInspector, см. Последний фрагмент кода ссылки.
https://megakemp.com/2009/02/06/managing-shared-cookies-in-wcf/