2014-12-22 138 views
1

我的项目中有两个WCF服务。 服务正在共享一种类型,但每种服务都会生成自己的类型。 是否可以为两种服务生成一个类?对于服务器端两个WCF服务之间的共享类型

示例代码:

[DataContract] 
class MyClass { /*some properties*/ } 

[ServiceContract] 
public interface IService1 
{ 
    [OperationContract] 
    MyClass GetSomeValue(); 
} 

public class Service1 : IService1 
{ 
    public MyClass GetSomeValue() { /*some logic*/ } 
} 

[ServiceContract] 
public interface IService2 
{ 
    [OperationContract] 
    MyClass GetSomeOtherValue(); 
} 

public class Service2 : IService2 
{ 
    public MyClass GetSomeOtherValue() { /*some logic*/ } 
} 

在客户端两个 “MyClass的” 正在生成每个服务:

namespace Services.Service1Reference { 
[System.SerializableAttribute()] 
public partial class RSTRole : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{ 
} 

namespace Services.Service2Reference { 
[System.SerializableAttribute()] 
public partial class RSTRole : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged 
{ 
} 
+0

只是为了确认 - 你是消费来自单个客户端的两种不同服务。这些服务本身有一个通用程序集,您希望在所有3个系统中共享这些服务? – StuartLC

+0

是的,你是对的 –

+0

你怎么生成你的代理类?视觉工作室还是svcutil? – KornMuffin

回答

1

这需要一些改变

  1. 您需要在客户端程序集中直接在两个服务中引用用于包含共享实体(DTO)的相同实际程序集(即,将此程序集添加为您要添加WCF服务引用的相同项目的引用)。根据Dimitri's comment,将共享实体重构为仅包含DTO的小程序集是有意义的,如果您还没有这样做的话。

  2. 在客户端,你需要选择Advanced添加服务引用时,然后选择Reuse Types in Referenced Assemblies,按以下操作:

Service reference with Shared Type

+0

我试过这种方式,但没有奏效。将再试一次。 –

+0

其重要的是.Net运行时间在服务器和客户端上是相同的。如果DTO程序集有其他引用,则需要将这些引用添加到客户端的引用中(因此尽量将它们设置为POCO) – StuartLC

+0

一切都正确,但它仍然为每个服务器生成类型。 –