我有一个单独的程序集(由WebService引用),我在其中创建了一个类(比如说ABC)和该类的集合(ABCCollection:IList,其中T:ABC)。现在,当我构建代理文件(output.config和Service1.cs)时,不会公开这两个类的定义。相反,在Servic1.cs中公开ABCCollection就像ABCCollection4IP3。
请告诉我这个问题的可能原因..
答案 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服务,但是在更改界面时会出现编译错误。