我在Visual Studio 2008中有一个WCF服务项目,它包含大约12个方法,其中一些返回原始类型,如bool或string。我还有一个Visual Studio单元测试项目,它引用了已发布的WCF服务。当所有返回类型都是原始的时,Test Project会成功编译。
如果我向返回自定义类的服务添加新方法,发布它并更新Test Project中的服务引用,则它不会编译。错误是: -
全部在自动生成的reference.cs文件中。
WCF服务方法的合同是: -
Page GetItem(string path);
并且Page类具有DataContract属性,并且它的公共属性具有DataMember属性。
我不愿意修改Reference.cs文件,因为每次更新服务时我都需要这样做。
任何人都知道为什么会这样吗?
斯图尔特。
答案 0 :(得分:1)
当您添加服务引用时,您将获得“在程序集中重用类型”选项 - 这可能是整理重复的关键。
或者您是否有一些引起重复的测试参考?
另外,看看项目树的References部分,看看那里是否有任何意外的事件(你是否引用了两个在同一命名空间中都包含Service References的程序集?)。
答案 1 :(得分:1)
使用自动生成的代理类总是很痛苦。
为了处理这样的情况,我使用单独的程序集与数据契约类和服务接口。
合同dll将具有:
public interface IService
{
[OperationContract]
List GetContentList();
}
[DataContract]
public class ContentItem
{
[DataMember] public string Name;
[DataMember] public object Data;
}
客户端将引用Contract.dll。 代理将手动创建:
class ServiceProxy : ClientBase<IService>, IService
{
public List GetContentList()
{
return Channel.GetContentList();
}
}
服务器dll将引用相同的Contract dll。 因此,我们将能够避免自动生成代理的任何错误。 此外,手动创建的代理将更简单,更易于管理。
答案 2 :(得分:0)
添加服务参考时,请尝试单击高级,然后选择&#34;生成异步操作&#34;。
我认为发生的事情是Web服务中存在一些异步方法,名称以&#34; Async&#34;结尾,这将与References.cs中生成的方法冲突。
e.g。想象一下,Web服务包含两种方法:(1)SayHello
和(2)SayHelloAsync
。
使用默认的基于任务的方法生成:
SayHello
和SayHelloAsync
for(1)SayHelloAsync
和SayHelloAsyncAsync
for(2)。发生冲突是因为有2个生成的方法称为SayHelloAsync
。
至少我认为这是怎么回事。无论如何设置&#34;生成异步操作&#34;为我工作。