1

生のメッセージで 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'、名前空間 'http:// www.w3.org/2003/05/soap-envelope'.

行で:

string firstName = reply.GetBody<string>();

サービスが開始され、VS2008 の [サービス参照の追加...] でサービス参照を追加しました。.NET Framework 3.5 を使用しています。

なぜこのエラーが発生するのかわかりません。

よろしくお願いします。

ゴラン

4

1 に答える 1

1

さて、SOAP Fault が発生しています。メッセージをログに記録してみてください (Fiddler、WCF ログ、またはクライアント側のサーバーから取得したメッセージから Message.GetReaderAtBodyContents を読み取るだけのいずれかを使用して)、障害が実際に何を示しているかを確認してください。サーバー側で IncludeExceptionDetailInFaults をオンにしてください。

于 2012-10-10T17:30:54.590 に答える