繁体   English   中英

在WCF服务中使用ASMX Web服务实体

[英]Using ASMX Web Service Entities in WCF Service

我们有一个很好的旧版.asmx Web服务(我们称之为“消息” Web服务),为了向后兼容,我们必须保留该服务。 .asmx服务公开此方法:

[WebMethod(Description = "Do Something")]
public int DoSomething(Entity1 e)
{
    ... 
}  

此Web服务使用从DLL引用的某些实体,例如:

namespace Software.Project.Entities
{
    [DataContract]
    public class Entity1
    {
        [DataMember]
        public string property1{ get; set; }
        // Lots of other properties...
    }
}

全新的WCF服务也使用此DLL。 现在,我必须从WCF调用旧的.asmx方法。 为此,在WCF项目中,我使用“添加服务引用”向导(高级-添加Web参考)添加了对.asmx项目的引用。

现在,太好了! 我可以通过以下方式从WCF调用DoSomething方法:

Entity1 e1 = new Entity1();
Software.Project.WCFService.ServiceReferenceName.Message m = new Software.Project.WCFService.ServiceReferenceName.Message();
m.Url = ConfigurationManager.AppSettings["MessageWebServiceURL"];
int r = m.DoSomething(e1);

不幸的是,这样做是行不通的:我收到编译器错误,例如WCF中的Entity1不好作为方法DoSomething的参数。 我要做的是:

Entity1 e2 = new Software.Project.WCFService.ServiceReferenceName.Entity1();
Software.Project.WCFService.ServiceReferenceName.Message m = new Software.Project.WCFService.ServiceReferenceName.Message();
m.Url = ConfigurationManager.AppSettings["MessageWebServiceURL"];
int r = m.DoSomething(e2);

这样,编译器接受该调用。 问题是WCF服务中的Entity1充满了字段和数据,因此我必须将所有数据复制到新实体。

我还尝试将对.asmx的引用作为服务引用添加,并标记“引用程序集中的重用类型”,但结果完全相同。

我不敢相信没有办法让Entity1完全相同! 那真的不可能吗?

对不起,但我认为我有个坏消息。 您可以尝试使用xml序列化而不是数据协定序列化,因为asmx对此不了解。

另外,这篇文章说这可能但不太容易: .NET 3.5 ASMX Web服务-通过.NET 3.5服务参考调用-通用类重用

也许您会发现添加翻译器类更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM