2013-04-17 136 views
1

我们有一个很好的旧.asmx Web服务(我们称之为“消息”Web服务),为了向后兼容,我们必须保留它。 的的.asmx服务公开这个方法:在WCF服务中使用ASMX Web服务实体

[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... 
    } 
} 

此DLL也使用全新的WCF服务。现在,我必须从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); 

不幸的是,这样做是行不通的:我得到一个编译错误一样,如果在ENTITY1 WCF是不好的论据方法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是完全相同的实体!这真的不可能吗?

回答

1

我很抱歉,但我认为我有坏消息。 您可以尝试使用xml序列化来代替数据协定序列化,因为asmx不知道它。

此外,这篇文章说,这有可能,但不是那么容易:.NET 3.5 ASMX Web Service - Invoked via .NET 3.5 Service Reference - Common Class Reuse

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

+0

为什么坏消息!?谢谢,这正是我一直在寻找的!我不得不把它弄乱一点才能使它工作,但现在很好!谢谢! :) – bluewaves

+0

很高兴到这里。因此 - 考虑用解决方案更新您的问题 - 以使其对其他问题有所帮助。 – evgenyl