0

私は WCF サービスを構築しています。コントラクトを IService ファイルに記述し、サービス ファイルに実装しました。宣言したメソッドの戻り値を変更しようとすると、問題が発生します。 CustomersService 名前空間のコード、特にロックされていて変更するためにアクセスできない CustomersServiceClient クラスに保存されています。

これは、ICustomersService ファイルにあるコードです。

 [ServiceContract]
    public interface ICustomersService
    {
        [OperationContract]
        CustomerDetails GetCustomerDetails(string customerid);
        [OperationContract]
        bool VerifyId(string customerid);
    }

CustomersService ファイル内のコード:

public CustomerDetails GetCustomerDetails(string customerid)
{
....
}
public bool VerifyId(string customerid)
{
...
}

CustomerService1 名前空間には、生成されてロックされたこのコードがあるため、IService にあるメソッドを変更しようとすると、ここでロックされて変更できないため、失敗します!

public class CustomersServiceClient : ClientBase<ICustomersService>, ICustomersService
    {
        public CustomersServiceClient();
        public CustomersServiceClient(string endpointConfigurationName);
        public CustomersServiceClient(Binding binding, EndpointAddress remoteAddress);
        public CustomersServiceClient(string endpointConfigurationName, EndpointAddress remoteAddress);
        public CustomersServiceClient(string endpointConfigurationName, string remoteAddress);

        public CustomerDetails GetCustomerDetails(string customerid);
        public bool VerifyId(string customerid);
    }

これは私にとって深刻な問題です。答えが見つかることを願っています。

4

1 に答える 1

1

Web サービスは、参照されたアセンブリよりも少し複雑です。サービス インターフェイスを変更すると、プロキシ クラスのコードは自動的に更新されません。契約を変更するたびに手動で更新する必要があります。

これを試して:

  1. クライアント プロジェクト -> サービス参照
  2. 参照を選択 -> マウスを右クリック
  3. サービス参照の更新

そのアセンブリを参照する場合、WCF はコントラクト型を再利用することもできます。その場合、データ コントラクトの変更はすぐにクライアントに表示されます。その回答で実装手順を見つけることができます: How to use a custom type object at the client

于 2012-06-26T00:59:33.837 に答える