簡體   English   中英

在WCF服務中使用ASMX Web服務實體

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM