2013-04-17 72 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