1

以下は、私の WCF サービス コードの簡略版です。このコードは正常に機能し、データを返します。

私の質問は、顧客オブジェクトをrefまたはoutで渡す場合にのみ機能するということです。コード全体を変更して、参照なしで顧客オブジェクトを渡すか、i 変数のカウントが 0 になるようにします。

List が参照変数の場合、これが ref/out で機能し、ref/out なしでは機能しないのはなぜですか。

また、複数の値を返す必要があるため、メソッドから値を返すことができないことに注意してください。

クライアントコード:

List<Customer> customers = null;
ClientProxy proxy = new ClientProxy();
proxy.GetCustomers(ref customers);
int i = customers.Count;

サービス プロキシ:

public class ClientProxy
{
    public void GetCustomers(ref List<Customer> customers)
    {
        INWGetCustomers proxy = new ChannelFactory<INWGetCustomers>("netNamedPipeBinding").CreateChannel();
        proxy.GetCustomers(ref customers);
    }
}

サービス契約とデータ契約:

[DataContract]
public class Customer
{
    [DataMember]
    public System.String CustomerId;

    [DataMember]
    public System.String CompanyName;
}

[ServiceContract(Namespace = "http://www.temp.com")]
public interface INWGetCustomers
{
    [OperationContract()]
    void GetCustomers(ref List<Customer> customers);
}

サービスコード:

public class NWGetCustomersService : INWGetCustomers
{
    public void GetCustomers(ref List<Customer> customers)
    {
        customers = new List<Customer>();
        customers.Add(new Customer() { CustomerId = "1", CompanyName = "A" });
        customers.Add(new Customer() { CustomerId = "2", CompanyName = "B" });
        customers.Add(new Customer() { CustomerId = "3", CompanyName = "C" });
        customers.Add(new Customer() { CustomerId = "4", CompanyName = "D" });
    }
}
4

2 に答える 2

1

これは、このコンテキストで ref または out を使用すると、list を出力パラメーターとして扱う必要があるためです。オブジェクトはサーバーとクライアントの間で送信されるため、実際の参照渡しではありません。WSDL を見ると、.NET がこのコードをどのように生成しているかがわかります。

要約すると、クライアントとサーバーで同じオブジェクトではないため、リストが参照変数であることは問題ではありません

于 2013-04-25T05:36:05.860 に答える