[英]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.