生のメッセージで 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 次のエラーが発生します。
System.Runtime.Serialization.SerializationException は処理されませんでした。名前が「障害」、名前空間が「http://www.w3.org/2003/05/soap-envelope 」'。" Source="System.Runtime.Serialization" StackTrace: System.Runtime.Serialization.DataContractSerializer.InternalReadObject (XmlReaderDelegator xmlReader、ブール値の verifyObjectName) で System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions (XmlReaderDelegator リーダー、ブール値の verifyObjectName) で System.Runtime .Serialization.XmlObjectSerializer.ReadObject(XmlDictionaryReader リーダー) で System.ServiceModel.Channels.Message.GetBody[T](XmlObjectSerializer シリアライザー) で System.ServiceModel.Channels.Message.GetBodyT で ClientTestService.Program.Main(String[] args) でE:\Projekti\WCF\Parus\ClientTestService\ClientTestService\Program.cs:System.AppDomain._nExecuteAssembly(アセンブリ アセンブリ、String[] args) の 22 行目 System.AppDomain.
行で:
string firstName = reply.GetBody<string>();
サービスが開始され、VS2008 の [サービス参照の追加...] でサービス参照を追加しました。.NET Framework 3.5 を使用しています。
なぜこのエラーが発生するのかわかりません。
Message クラスを使用しない場合、すべて正常に動作します。私はこれを意味します:
[ServiceContract]
public interface ITestService
{
[OperationContract]
Person GetPersonById(int id);
}
public class TestService : ITestService
{
public Person GetPersonById(int id)
{
Person person = Employees.CreateEmployees().First(e => e.Id == id);
return person;
}
}
2) クライアントコード:
static void Main(string[] args)
{
TestServiceClient client = new TestServiceClient();
int value = 1;
Person person = client.GetPersonById(value);
Console.WriteLine(person.FirstName);
client.Close();
}
誰かが助けてくれれば本当に感謝します。