简体   繁体   中英

Using ASMX Web Service Entities in WCF Service

We have a good old .asmx web service (let's call it "Message" Web Service) which we have to preserve for backward compatibility. The .asmx service exposes this method:

[WebMethod(Description = "Do Something")]
public int DoSomething(Entity1 e)
{
    ... 
}  

This web service uses some entities referenced from a DLL, for example:

namespace Software.Project.Entities
{
    [DataContract]
    public class Entity1
    {
        [DataMember]
        public string property1{ get; set; }
        // Lots of other properties...
    }
}

This DLL is also used by a brand-new WCF service. Now, I have to call the old .asmx method from WCF. To do so, in the WCF project, I added a reference to the .asmx project, using the "Add service reference" wizard (Advanced - Add Web Reference).

Now, great! It is possible for me to call the DoSomething method from WCF, this way:

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);

Unfortunately, doing so won't work: I get a compiler error like if Entity1 in WCF is not good as argument for method DoSomething. What I have to do is:

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);

By doing so, the compiler accepts the call; the problem is that Entity1 in my WCF service is full of fields and data and I would have to copy all the data to the new entity.

I also tried adding the reference to the .asmx as a Service Reference, and flagging "Reuse types in reference assembly", but the result was exactly the same.

I can't believe that there isn't a way to make it understand that Entity1 is exactly the same entity! Is that really impossible?

I am sorry, but i think I have bad news. You can try to use xml serialization instead of data contract serialization, since asmx does not know about it.

Also, this post say this possible but not so easy: .NET 3.5 ASMX Web Service - Invoked via .NET 3.5 Service Reference - Common Class Reuse

Probably you'll find easier to add your translator class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM