Передайте (прокси) SoapHeader через службу WCF в службу ASMX - PullRequest
1 голос
/ 05 июля 2011

У нас есть существующий веб-сервис ASMX (.NET 2.0), и сейчас я создаю новый сервис с использованием WCF и .NET 4.0.

Сервис ASMX реализовал пользовательскую аутентификацию через SoapHeader и выглядитчто-то вроде этого, где SecurityContextExtension обрабатывает аутентификацию:

[WebService(Namespace = "http://tempuri.org/")]
public class ExistingWebService : WebService
{

  public CustomContextHeader CustomContextHeader{ get; set; }

  [WebMethod, SoapHeader("CustomContextHeader")]
  [SecurityContextExtension]
  public string GetExisting(int customerId)
  {
    // do stuff 

    return a string value;
  }
}

Новая служба должна вызывать этот метод в существующей службе ASMX, поэтому я добавил ее в качестве ссылки на службу в свой проект.

CustomContextHeader выставляется в качестве параметра метода (я полагаю, благодаря волшебству ссылки на службу WCF!), И поэтому мой вызов ASMX из моей службы WCF выглядит следующим образом:

[ServiceContract]
public interface INewService
{
  [OperationContract]
  string GetNew(int myId);
}

public class NewService : INewService
{
  public string GetNew(int myId)
  {
    // do stuff

    using (var client = new ExistingWebServiceSoapClient())
    {
      var new = client.GetExisting(CustomContextHeader, myId);
    }

    // do more stuff
  }
}

Клиент, который обращается к новой службе WCF, также обращается к существующему ASMX, поэтому он уже может сгенерировать правильный CustomContextHeader и перейти к методу GetExisting.

Так что, если клиентсобираюсь сгенерировать тот же CustomContextHeader, что и для ASMX, как мне изменить службу WCF, чтобы она принималась и распаковывалась для передачи в ASMX через параметр?

У меня есть Google, и я обнаружил много информациина Контракты сообщений и WCFExtras , но не могу понять, как реализовать любой из этих методов для достижения того, что мне нужно.Я бы предпочел не добавлять другую зависимость, такую ​​как WCFExtras, поэтому любое решение, которое может использовать готовую функциональность .NET 4.0, будет высоко оценено!

1 Ответ

0 голосов
/ 05 июля 2011

Завершено с помощью WCFExtras +

...