2

クライアント アプリで次のエラーが発生します

There was an error reading from the pipe: De pipe is beëindigd. (109,0x6d).

私の OperationContract の特定の実装を使用する場合。以下は要点を切り詰めたサンプルです。私のDataContractsは次のようになります:

[DataContract]
public class Person
{
    [DataMember]
    public string FirstName { get; set; }
    [DataMember]
    public string LastName { get; set; }
}

[DataContract]
public class Employee : Person
{
    [DataMember]
    public string Function { get; set; }
}

そして、私の ServiceContract は次のようになります。

[ServiceContract] パブリック インターフェイス IAuthentication {

[OperationContract]
[WebGet]
Person GetDeveloper();

[OperationContract]
[WebGet]
Person GetArchitect();

}

このサービスを次のクラスのように実装します。

public class Authentication : IAuthentication
{
    public Person GetDeveloper()
        {
            Person architect = new Person()
            {
                FirstName = "Asghar",
                LastName = "Panahy"
            };
            return architect;
        }

        public Person GetArchitect()
        {
            Employee architect = new Employee()
            {
                FirstName = "Asghar",
                LastName = "Panahy",
                Function = "Architect"
            };
            return architect;
        }
}

注: どちらのメソッドも同じ型を返します。1 つだけが Person をインスタンス化してそれを返しますが、2 つ目のメソッドは Employee をインスタンス化しますが、これも Person です。

クライアントから呼び出すと、サーバーではエラーが発生しませんが、クライアント側では次のようになります。

Console.WriteLine(" Connecting to Authenticate service... ");

            NetNamedPipeBinding myBinding = new NetNamedPipeBinding("Authentication.Endpoint"); ;
            EndpointAddress myEndpoint = new EndpointAddress("net.pipe://localhost/authentication"); ;
            var myChannelFactory = new ChannelFactory<IAuthentication>(myBinding, myEndpoint);

            IAuthentication proxy = myChannelFactory.CreateChannel();
            Person person = proxy.GetDeveloper();
            Console.WriteLine(String.Format("GetDeveloper OK : {0} {1} ", person.FirstName, person.LastName));

            person = proxy.GetArchitect();
            Console.WriteLine(String.Format("GetArchitect OK : {0} {1} ", person.FirstName, person.LastName));

出力は次のとおりです。

Authenticate サービスに接続しています... GetDeveloper OK : Asghar Panahy パイプからの読み取り中にエラーが発生しました: De pipe is beëindigd. (109、0x6d)。

誰でもこれについて私を助けてもらえますか? アスガル

4

1 に答える 1

2

質問が少し古いことは知っていますが、まだ誰かを助けるかもしれません。名前付きパイプバインディングで同じ問題が発生しました(同じエラーが発生します)。

ここでの問題は、Employee 派生クラスの戻りです。ここに良い説明があります

したがって、KnownTypeAttribute を適用すると正常に動作するはずです。

[DataContract]
[KnownType(Employee)]
public class Person
...
于 2011-11-29T09:59:38.383 に答える