在WCF服务中使用ASMX Web服务实体
我们有一个很好的旧.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...
}
}
这个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);
不幸的是,这样做是行不通的:我得到一个编译器错误,就好像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服务引用调用 - 通用类重用
可能你会发现更容易添加翻译课程。
链接地址: http://www.djcxy.com/p/71297.html