将通过WCF服务的SoapHeader传递给ASMX服务

问题描述:

我们有一个现有的ASMX Web服务(.NET 2.0),现在我正在使用WCF和.NET 4.0创建一个新服务。将通过WCF服务的SoapHeader传递给ASMX服务

的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?

我已经谷歌搜索,并发现了很多关于Message ContractsWCFExtras的信息,但不能完全弄清楚如何实现任何方法来实现我所需要的。我不希望添加像WCFExtras这样的其他依赖项,因此任何可以使用即装即用的.NET 4.0功能的解决方案都将不胜感激!

+0

@Shevak我正面临一个相关的问题。你可以帮助我,因此,写在这里。你能分享我,什么作为“CustomContextHeader”从wcf客户端传递,因为这个额外的argumnet显示为标题。我们是否必须创建名为“CustomContextHeader”的对象名称并在其中保留tokenID或相关属性并将其对象作为argumnet传递?请给我建议。我不清楚在ASMX调用中应该如何通过头部参数,没有这样的argumnet,我们只设置了TOKENID字段,并且方法现在只有一个argumnet“ID”,它显示了两个argumnet - HEADER,ID和OUT PARAMETER respoonse。 – dsi

结束使用WCFExtras+

+0

请看下面的问题和答案,如果你知道,http://*.com/q/21671535/2182021。谢谢Shevek。 – dsi