Как установить cookie в запросе при вызове веб-службы Java из приложения Windows с помощью C # - PullRequest
2 голосов
/ 22 сентября 2009

Как мне установить cookie в запросе при вызове веб-сервиса java из приложения Windows, используя c #. Я хочу передать JSESSIONID как cookie в HttpHeader при вызове веб-сервиса Java. У меня есть JSESSIONID. Я хочу знать, как создать cookie и передать его в запросе.

Может ли кто-нибудь предложить мне. Это возможно.

Ответы [ 2 ]

4 голосов
/ 22 сентября 2009

Если вы используете WCF для создания клиентского прокси (svcutil.exe), вы можете добавить свой заголовок http к вашему запросу, например так:

// MyServiceClient is the class generated by svcutil.exe which derives from
// System.ServiceModel.ClientBase<TServiceContract> and which allows you to
// call the web service methods
using (var client = new MyServiceClient())
using (var scope = new OperationContextScope(client.InnerChannel))
{
    var httpRequestProperty = new HttpRequestMessageProperty();
    // Set the header value
    httpRequestProperty.Headers.Add("JSESSIONID", "XXXXX");
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

    // Invoke the method
    client.SomeMethod();
}

Если вы используете wsdl.exe для создания своего клиента, вы можете посмотреть здесь .


UPDATE:

На самом деле нет необходимости приводить к HttpWebRequest для добавления пользовательского заголовка:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    WebRequest request = base.GetWebRequest(uri);
    request.Headers.Add("JSESSIONID", "XXXXX");
    return request;
}
1 голос
/ 16 октября 2013

Этот ответ в значительной степени основан на ответе Дарина Димитрова - если вы считаете его полезным, пожалуйста, подпишите его ответ.

В моем случае веб-служба хотела, чтобы значение JSESSIONID использовалось как cookie, а не как разное значение заголовка.

Кроме того, мой клиент WCF использовал прокси-код, сгенерированный средством Visual Studio Project - Set Service Reference, которое, как я считаю, аналогично использованию программы wsdl.exe.

  // Session ID received from web service as response to authentication login
  private string _sessionId;


     // This code needed to add the session ID to the HTTP header as a JSESSIONID cookie value
     using (MyServiceClient myServiceClient = new MyServiceClient())
     using (new OperationContextScope(myServiceClient.InnerChannel))
     {
        HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
        httpRequestProperty.Headers.Add("Cookie", "JSESSIONID=" + _sessionId);
        OperationContext.Current.OutgoingMessageProperties.Add(
                                          HttpRequestMessageProperty.Name, httpRequestProperty);

        myServiceClient.someMethod();
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...