首页 新闻 会员 周边

请问 WCF DataContract 类,其 method 被客户端调用问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2010-11-02 22:16

本帖已曾查了一堆书和资料,如:
http://www.cnblogs.com/frank_xl/archive/2009/04/14/1433712.html
,并曾询问老徐大哥,但仍希望再询问网络上各大高手的意见。

即使最后答案是无解,若各位网友愿提供不错的意见,即使只是一个有参考价值的 URL 或文章,本帖也会给分。

---------------------------------------------------------------------------------
需求 :
WCF Service 的「数据契约(Data Contract)」类,里面又有自定义的「方法」,希望这个方法,也能在网络传送后,能被客户端调用。

---------------------------------------------------------------------------------
起因 :
一位 Design Patterns 走火入魔的狂人,在一个 ASP.NET 小系统里,也搞了几百个自定义类。现在要把这个 ASP.NET App_Code 文件夹里许多里,能发布成 WCF Service。但有一个需求,如下 :

 

//这是 WCF 服务器端,某个类的代码,返回一个自定义类 TradeTO 的实例,且此 TradeTO 类有属性也有「方法」
public com.公司.vehicle.to.TradeTO calculate (com.公司.vehicle.to.TradeTO tradeTO)
{
com.公司.vehicle.sb.CalculatorSB.calculateMoney (tradeTO);
return tradeTO;
}


TradeTO 类的实例,希望能在 WCF 中被传输。此类已在 Server-side 被标示为 [DataContract],但由于成员标示 [DataMember] 只适用于 Property、Field,不适用于 Method。导致返回 WCF client-side 的 TradeTO 类的实例,在客户端,会调用不到其 方法: Method1(),如下 :

 

 

using System.Runtime.Serialization;
using System.ServiceModel;

[DataContract]
public class TradeTO
{
[DataMember]
public string strName = "吴小弟";

[DataMember]
public string StrName { get; set; }

// 这个 Method1 方法,在客户端无法调用 (此为本帖目前的问题所在)
public string Method1()
{
return "this is Method1...";
}
}


我试过其他的做法,例如把 Method1() 标示为 [OperationContract],也把 TradeTO 类标示为 [ServiceContract],并将该类发布为 WCF 服务,如下 :

 

 

using System.Runtime.Serialization;
using System.ServiceModel;

[DataContract]
[ServiceContract]
public class TradeTO
{
[DataMember]
public string strName = "吴小弟";

[DataMember]
public string StrName { get; set; }

// 这个 Method1 方法,在客户端无法调用 (此为本帖目前的问题所在)
[OperationContract]
public string Method1()
{
return "this is Method1...";
}
}

 

虽然编译无误。但结果都一样,无效,客户端就是无法在返回的 TradeTO 里 :
public com.tfmi.vehicle.to.TradeTO calculate (com.tfmi.vehicle.to.TradeTO tradeTO)

找到、调用这个 TradeTO 实例的方法,只能找到它的 Property、Field (标示为 [DataMember] 的成员)

---------------------------------------------------------------------------------

虽然知道这是 .NET WebService、WCF 的默认行为,但仍想请教,有无其他解决方案?或有其他高手有独特的见解。
先谢谢各位。
---------------------------------------------------------------------------------

 

问题补充: 别人提出的另一种思考方向: http://topic.csdn.net/u/20101031/15/b7b7625f-cdfc-4bb7-9594-1be6f937ccae.html
WizardWu的主页 WizardWu | 小虾三级 | 园豆:1402
提问于:2010-10-31 15:29
< >
分享
所有回答(1)
0

其实你没有必要把方法写到TradeTO中,你也知道的 [DataMember] 只适用于 Property、Field,那么你可以把方法定义另外一个类中

天神一 | 园豆:845 (小虾三级) | 2010-10-31 15:54
thanks. 因为有几百个既有的自定义类,都是以前写好的。希望在不更动既有源代码下,先寻求有无方式,可直接挂在 IIS 上成为 WCF Service。
支持(0) 反对(0) WizardWu | 园豆:1402 (小虾三级) | 2010-10-31 17:57
有几百个既有的自定义类,都是以前写好的 (j2eer 转 .net 狂人,玩 ooad、设计模式,玩到走火入魔)。 目前希望在不更动既有源代码下,先寻求是否有方式,可直接挂在 IIS 上成为 WCF Service。
支持(0) 反对(0) WizardWu | 园豆:1402 (小虾三级) | 2010-10-31 18:00
刚才看了一下CSDN中一位老兄的办法也不错,使用属性,不过和我另外写方法差不多,不把那个方法写在TradeTO。
支持(0) 反对(0) 天神一 | 园豆:845 (小虾三级) | 2010-11-01 09:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册