将(代理)SoapHeader通过WCF服务传递给ASMX服务

时间:2011-07-05 12:27:02

标签: .net c wcf soap asmx

我们有一个现有的ASMX Web服务(.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服务参考的魔力!)所以我从我的WCF服务调用ASMX看起来像这样:

[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方法。

因此,如果客户端要生成与ASMX相同的CustomContextHeader,如何更改我的WCF服务以接受并提取它以通过参数传递给ASMX?

我使用Google搜索并在Message ContractsWCFExtras上发现了大量信息,但无法弄清楚如何实现这两种方法来实现我的需求。我宁愿不添加像WCFExtras这样的另一个依赖项,因此任何可以使用开箱即用的.NET 4.0功能的解决方案都将非常感激!

1 个答案:

答案 0 :(得分:0)

使用WCFExtras+

结束