首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带SOAP头和Mtom的ASP.NET web服务到WCF 3的迁移

带SOAP头和Mtom的ASP.NET web服务到WCF 3的迁移
EN

Stack Overflow用户
提问于 2013-10-07 13:46:56
回答 1查看 602关注 0票数 0

我需要做从ASP.NET web服务到WCF服务的迁移。当前代码是这样的:

服务器端:

代码语言:javascript
复制
    public class MyType
    {
    public int x;
    public string s;
    }

    public class MyService : WebService
    {
    public MyType myObj;

    [WebMethod]
    [SoapHeader("myObj", Direction=SoapHeaderDirection.InOut)]
    public string SomeMethod() // NO Parameter!!!
    {
            if (myObj.x > 5)
               return myObj.s;
            else
               return "Less than 5";    
        }
    }
</code>

客户端:

代码语言:javascript
复制
    MyService service = new MyService();
    MyType m = new MyType();
    m.x = 10;
    m.s = "That's it!!!";
    service.myObj = m;
    string s = service.SomeMethod();

这会很顺利地工作。现在我需要将其更改为WCF。我发现了很多关于如何使用WCF对soap头进行签名的主题,但都是关于如何使用MessageContract作为类的属性,这些属性将作为参数提供给操作。如下所示:

代码语言:javascript
复制
<code>
    [MessageContract]
    public class MyType
    {
       public int x;
       public string s;
    }

    [OperationContract]
    public string SomeMethod(MyType myType)
    {

    } </code>

但这不是我需要的,我的方法必须保持不变(不带参数)。

很少有博客讨论使用WCFExtra库或实现客户端调度程序接口来向每个传出请求添加SOAP头。但同样,我希望web服务迁移到WCF不会影响我的客户端,并且他们不需要做任何代码更改,他们应该能够使用.asmx扩展的web服务。此外,当前的web服务使用MTOM和WSE-3。有没有什么简单的方法。

请帮我弄一下这个。

我已经阅读了以下文章,但没有一篇文章讨论如何处理SOAP头WSE-3:

代码语言:javascript
复制
http://megakemp.com/2008/11/27/migrating-aspnet-web-services-to-wcf/
http://megakemp.com/2008/11/27/migrating-aspnet-web-services-to-wcf/
http://vikasbhardwaj15.blogspot.in/2012/05/convert-asmx-web-services-to-wcf.html
http://blogs.msdn.com/b/trobbins/archive/2006/12/02/integrating-wcf-with-your-existing-asmx-services.aspx
http://blogs.msdn.com/b/kaevans/archive/2006/10/05/phased-migration-from-asmx-to-wcf.aspx
http://www.manas.com.ar/waj/2007/05/31/asmx-to-wcf-migration/
EN

回答 1

Stack Overflow用户

发布于 2013-10-07 15:03:55

在过去,我会从asmx中提取WSDL。然后,我将使用参数/mcsvcutil运行它,该参数将生成服务和消息约定。然后,我将重构代码,使其具有相同的行为。在大多数情况下,它是有效的,但也有一些陷阱。

在您发布的代码中,您希望将"myObj“封装为请求和响应消息中的头部,如下所示:

代码语言:javascript
复制
[DataContract]
public class MyType
{
    [DataMember]
    public int x;

    [DataMember]
    public string s;
}

[MessageContract]
public class SomeMethodRequestMessage
{
    [MessageHeader] public MyType myObj;
}

[MessageContract]
public class SomeMethodResponseMessage
{
    [MessageHeader] public MyType myObj;
    [MessageBodyMember] public string result;
}

// Inside your service contract

[OperationContract]
public SomeMethodResponseMessage SomeMethod(SomeMethodRequestMessage message)
{
   // do stuff
}

参见Using Message Contracts

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19217848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档