我們有一個很好的舊.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是完全相同的實體!這真的不可能嗎?
爲什麼壞消息!?謝謝,這正是我一直在尋找的!我不得不把它弄亂一點才能使它工作,但現在很好!謝謝! :) – bluewaves
很高興到這裏。因此 - 考慮用解決方案更新您的問題 - 以使其對其他問題有所幫助。 – evgenyl