公开结构 - WCF Web服务

时间:2009-07-24 11:26:35

标签: wcf

我有一个单独的程序集(由WebService引用),我在其中创建了一个类(比如说ABC)和该类的集合(ABCCollection:IList,其中T:ABC)。现在,当我构建代理文件(output.config和Service1.cs)时,不会公开这两个类的定义。相反,在Servic1.cs中公开ABCCollection就像ABCCollection4IP3。

请告诉我这个问题的可能原因..

2 个答案:

答案 0 :(得分:0)

它们并不是同一类型。这是设计的。考虑一下,如果您的服务是在.NET中,而您的客户端是在Java中,它将如何工作。它们显然是两种不同的类型。

答案 1 :(得分:0)

设计WCF服务时的最佳做法是将项目拆分为单独的程序集:

装配SomeProject.ServiceContract

此程序集包含您的服务合约(只是接口)。

示例:

[ServiceContract (...)]
public interface ICan {

   [ServiceOperation (...)]
   void EatCandies (MyListOfCandies candies);

}

装配SomeProject.DataObjects

此程序集包含服务合同使用的所有数据对象。

示例:

[DataObject]
public class MyListOfCandies : List<Candy> {
    ...
} 

在您的项目中,使用您的Web服务引用程序集“SomeProject.DataObjects”,然后添加您的Web服务。您将看到Visual Studio将不再生成任何存根对象,但将使用您的实现。

您可以对ServiceContract程序集执行相同的操作。这样您仍然可以使用Web服务,但是在更改界面时会出现编译错误。