我正在尝试测试WCF Web服务,并且在引入复杂的返回类型时遇到问题。我试图保持这个简单的开始,并验证我可以在Web服务和客户端之间传递数据。我创建了以下文件:MyService.svc,MyService.cs和IMyService.cs。这是在ASP.NET C#中完成的。
MyService.cs如下所示:
public class MyService : IMyService
{
public void DoWork()
{
}
public bool BoolTest()
{
return false;
}
public string StrTest(string input)
{
return input;
}
}
IMyService.cs看起来像这样:
[ServiceContract]
public interface IMyService{
[OperationContract]
void DoWork();
[OperationContract]
bool BoolTest();
[OperationContract]
string StrTest(string input);
}
我有一个控制台应用程序,我使用"服务参考"连接到上面的服务。当我使用上面显示的代码时,所有内容都可以正常链接,我可以调用Web服务提供的功能。
当我尝试返回更复杂的内容(如数组,列表或自定义对象)时,会出现问题。使用其中一种返回类型向Web Service添加函数后,尝试更新控制台应用程序中的服务引用,引用无法更新并丢失。
这是MyService.cs,其中包含导致失败的其他方法:
public class MyService : IMyService
{
public void DoWork()
{
}
public bool BoolTest()
{
return false;
}
public string StrTest(string input)
{
return input;
}
public string [] StrArrTest()
{
string[] s = new[] { "test", "test2" };
return s;
}
}
以下是IMyService.cs的副本,其中添加了导致错误的附加方法:
[ServiceContract]
public interface IMyService{
[OperationContract]
void DoWork();
[OperationContract]
bool BoolTest();
[OperationContract]
string StrTest(string input);
[OperationContract]
string [] StrArrTest();
}
如果我使用List<string>
作为返回类型或MyObject
作为返回类型,它也会失败。
我猜测需要进行某种序列化,但我很难确切地追踪到我需要做的事情。
可能有用的其他信息......客户端和主机在同一台机器上运行。当我在网络浏览器中访问http://localhost/MyService.svc时,没有显示任何错误。当我访问http://localhost/MyService.svc?wsdl时,会出现一个下降大小的xml文档。
任何人都可以帮忙解释我需要做什么,以便我可以在Web服务中返回数组和对象列表吗?
我发现了类似的问题,why does my silverlight reference to my wcf service blow up when I add a method to the wcf service that returns a generic list,但它适用于我没有使用的SilverLight。我看了一下帖子中提到的Reference.cs文件,当一切正常时,它会填充一堆东西。如果未正确更新引用(在添加返回数组的方法之后),则Reference.cs文件为空,但有关正在自动生成的文件的注释除外。