我正在尝试将WCF服务与原始邮件一起使用。
1)WCF服务代码:
[DataContract]
public class Person
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
public static List<Person> CreateEmployees()
{
List<Person> lstPersons = new List<Person>()
{
new Person { Id = 1, FirstName = "Andrey", LastName = "Andreyev" },
new Person { Id = 2, FirstName = "Sergey", LastName = "Sergeyev" }
};
return lstPersons;
}
[ServiceContract]
public interface ITestService
{
[OperationContract(Action = TestService.RequestAction, ReplyAction = TestService.ReplyAction)]
Message GetPersonById(Message id);
}
public class TestService : ITestService
{
public const String ReplyAction = "http://localhost:4249/Message_ReplyAction";
public const String RequestAction = "http://localhost:4249/Message_RequestAction";
public Message GetPersonById(Message id)
{
string firstName = Employees.CreateEmployees().First(e => e.Id == id.GetBody<int>()).FirstName;
Message response = Message.CreateMessage(id.Version, ReplyAction, firstName);
return response;
}
}
2)客户代码:
static void Main(string[] args)
{
TestServiceClient client = new TestServiceClient();
String RequestAction = "http://localhost:4249/Message_RequestAction";
int value = 1;
Message request = Message.CreateMessage(MessageVersion.Default, RequestAction, value);
Message reply = client.GetPersonById(request);
string firstName = reply.GetBody<string>();
Console.WriteLine(firstName);
client.Close();
}
当我使用:int value = 1运行客户端时,一切正常。但是,当我使用:int value = 2时,我收到以下错误:
第1行位置错误276.期望命名空间'http://schemas.microsoft.com/2003/10/Serialization/'中的元素'string'。遇到名为'Fault'的'Element',命名空间'http://www.w3.org/2003/05/soap-envelope'。
在线:
string firstName = reply.GetBody<string>();
服务已启动,我已通过VS2008中的“添加服务引用...”添加了服务引用。我使用的是.NET Framework 3.5。
我不确定为什么我会收到此错误。
提前感谢您的帮助。
戈兰
答案 0 :(得分:1)
好吧,你得到了一个SOAP Fault。尝试记录消息(使用Fiddler,使用WCF日志记录,或者只从客户端从服务器获取的消息中读取Message.GetReaderAtBodyContents),然后查看故障实际说明的内容。确保在服务器端启用IncludeExceptionDetailInFaults。