以下は、私の 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" });
}
}