2008-11-08 55 views
5

说我有如下的界面,我想我的服务器(一个普通的web服务)和我的客户(一个Silverlight 2.0的应用程序)之间共享:共享服务接口,并在Silverlight模型中,使用WCF

public interface ICustomerService 
{ 
    Customer GetCustomer(string name); 
} 

我的Web服务实现了这个接口,并引用Customer类型定义类库。

通常,如果你想消费从WCF客户端这个服务,说WinForms应用程序,你可以分享你的模型组装和服务合同的接口。然后,通过使用ChannelFactory,您可以动态地创建一个实现你的服务接口的代理。就像:

ICustomerService myService = new ChannelFactory<ICustomerService>(myBinding, myEndpoint); 
Customer customer = myService.GetCustomer("romain"); 

我基本上想做同样的事情,但从一个Silverlight 2.0应用程序。银光ChannelFactory似乎并不像其他人一样...

你知道这是否可能吗?

注意:由于Silverlight应用程序只能是指Silverlight的项目,我有:MyModel.dll的

两个版本包含Customer类型:

  • 一个编译靶向.NET Framework 3.5的,引用通过我的网络服务项目
  • 另一个编译的目标Silverlight 2.0框架,引用我的Silverlight应用程序

MyServicesContracts.dll的两个版本包含ICustomerService接口:

  • 一个编译靶向.NET Framework 3.5的,我的网络服务项目
  • 引用另一个编译靶向Silverlight的2.0框架,通过我的Silverlight应用程序
  • 引用

回答

3

我想你会发现这个thread有趣。您可以共享不同项目之间的代码文件或者编译针对多个目标的单一项目。

0

我可能是错的,但我认为如果您使用DataContract和DataMember属性修饰WCF服务返回的对象,则应该能够在您的Silverlight应用程序和WCF服务之间共享对象,而无需在客户端中创建类(应该由代理来处理。

0

极短...


您可以将Silverlight应用程序添加一个服务引用为你服务。在已经创建了你的代理。当你这样做,你就会有在客户端自动生成代理服务器


您的wcf服务接口必须使用DataContract和OperationContract属性进行排序,并且与此服务一起使用的POCO类必须具有DataContract和DataMember属性。


http://msdn.microsoft.com/en-us/library/cc197940(VS.95).aspx

0

我知道这是为时已晚,以提供一个解决方案,但它是我的问题太多,我发现Portable Class Libraries。这是您的问题的完美解决方案。