使用WCF在Silverlight中共享服务接口和模型

时间:2008-11-08 17:18:50

标签: c# .net wcf silverlight

假设我有以下界面,我想在我的服务器(常规Web服务)和我的客户端(Silverlight 2.0应用程序)之间共享:

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框架3.5,由我的Web服务项目引用
  • 另一个编译目标是Silverlight 2.0框架,由我的silverlight app
  • 引用

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

  • 一个编译目标.NET框架3.5,由我的Web服务项目引用
  • 另一个编译目标是Silverlight 2.0框架,由我的silverlight app
  • 引用

4 个答案:

答案 0 :(得分:3)

我想你会发现这个thread很有意思。您可以在单独的项目之间共享代码文件,也可以针对多个目标编译单个项目。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

很短......


 您可以在silverlight应用程序下创建代理,为服务添加服务引用。执行此操作时,您将在客户端上自动生成代理。


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


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

答案 3 :(得分:0)

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