假设我有以下界面,我想在我的服务器(常规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
类型:
两个版本的MyServicesContracts.dll,其中包含ICustomerService
接口:
答案 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。这是您问题的完美解决方案。