У нас есть существующий веб-сервис 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, будет высоко оценено!