日期:2014-05-20  浏览次数:20696 次

silverlight 调用 WCF服务请教
实体
[DataContract]
public class StudentClass
{
   [DataMember]
   public string Name
   ....
}
服务A
[ServiceContract]
public class ServiceA
{
   public StudentClass GetClass()
  {
  ..
  }
}

服务A
[ServiceContract]
public class ServiceB
{
   public void SetClass(StudentClass cls)
  {
  ..
  }
}

silverlight客户端,服务引用这二个服务。
这时,会生成二个实体代理类(在服务引用的Reference.cs里),但空间不同,如下。
ServiceA.StudentClass
ServiceB.StudentClass

现问题是
无法调用ServiceB时直接传我从ServiceA获取回来的 StudentClass.如。

ServiceA.StudentClass cls = ServiceAClient1.GetClass();
ServiceBClient1.SetClass(cls); // 异常.

// 除非我再new 一个 ServiceB.StudentClass的对象,再赋做操作。

-----------

1.有没有办法让我引用的服务都指向同一个代理实体类,因为项目中有很多类似的情况,不可能每次都做这种类似很“雅观”1的操作。
2. 因项目的需要,不可能把这二个服务合成一个。





------解决方案--------------------
你好,
在生成代理类窗口中的高级选项里可以设置重用引用配件中的类。通常做法是写一个class library项目把要重用的类放进去,然后在SL项目中引用程序集。在添加服务引用时勾选重用类即可。
------解决方案--------------------
合成一个也不是在使用端去合成,
你应该是在服务端去合成啊。
------解决方案--------------------
要达到你的要求的话,就不能在客户端使用自动生成的Reference资源来调用服务接口,要自己编码实现服务接口的调用,在服务端和客户端引用相同的DataContract,这样就才解决,一句话,就是不能用自动生成的客户端代码了。
------解决方案--------------------
显然你们过去误解了什么叫做服务,把本来是一个服务的东西分割成很多服务出来。没有办法,创建新的服务,然后把所有其它方法功能全都在这个新的服务中作委派中转(写一句话调用),客户端只访问这一个新的服务。
------解决方案--------------------
SvcUtil之类的是按照服务的概念设计的,一次针对一个服务生成本地代理,而不是针对整个网站上的所有服务综合起来的。如果要使用这类工具,当然只能按照它的思路。
------解决方案--------------------
楼主,你问题解决没有啊,求分享