0

これは非常に恥ずかしいことです。自分で解決策を見つけようとしましたが、実際には知識が不足しているため、ここに質問を投稿しています。

私のサービスを呼び出すと、私のwcfサービスはこの値を返します

   <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <GetProcessLocationsResponse xmlns="http://tempuri.org/">
         <GetProcessLocationsResult >
            <a:ProcessLocationData>
               <a:Id>1</a:Id>
               <a:Name>IL</a:Name>
            </a:ProcessLocationData>
            <a:ProcessLocationData>
               <a:Id>2</a:Id>
               <a:Name>MD</a:Name>
            </a:ProcessLocationData>
            <a:ProcessLocationData>
               <a:Id>3</a:Id>
               <a:Name>NY</a:Name>
            </a:ProcessLocationData>
             </GetProcessLocationsResult>
      </GetProcessLocationsResponse>
   </s:Body>
</s:Envelope>

私のサービスクラスでは、このメソッドを書きました

 public Array GetProcessLocations()
    {
        return this.GetSoapServiceClient().GetProcessLocations().ToArray();
    }

    public List<ProcessLocationData> GetProcessLocationsOnlyName()
    {
        return this.GetSoapServiceClient().GetProcessLocations().ToList();
    }

以下のように xyz.class でこのサービスを呼び出します

 Array GetProcLocation=  new GatewayService().GetProcessLocations();

これは、ID や名前などのオブジェクト全体を返します

しかし、「GetProcessLocationsOnlyName」メソッドを呼び出して名前だけを取得しようとしていました

私は以下のようにしようとしていました

array ProcName= ProcessLocationData.Name

配列内の (IL,MD,NY) のようなサービス内のすべての名前を返す必要がありますが、ProcessLocationData をまったく表示できませんでした。

別の方法で、配列を分割(GetProcLocation)し、名前だけを取得して新しい配列に追加しようとしていましたか? それは理にかなっていますか?

誰かが私を正しい道に案内してください。事前に感謝します。

4

1 に答える 1

2

私はあなたの質問について少し混乱しています。どちらも ProcessLocationData の配列を返し、1 つは ID と名前を含むリストを返し (GetProcessLocations)、もう 1 つは名前のみを含む ProcessLocationData の配列を返します (GetProcessLocationsOnlyName)。問題は、クライアント プロキシに GetProcessLocationsOnlyName メソッドが含まれていないことです。

両方のメソッドにOperationContractのアノテーションが付けられていることを確認する必要があります。そうしないと、サービスによって公開されません。この属性は、サービス インターフェイスまたはサービス内で直接使用する必要があります。サービスが wsdl またはWCF Test Clientを使用して両方のメソッドを公開していることがわかります。

次に、クライアント プロキシが最新であることを確認する必要があります。


コメントに関連して、名前フィールドのみを返したい場合は、次のオプションがあります。

  • 同じDataContractを使用できます。つまり、ProcessLocationData のリストを返し、オブジェクトごとに空の Id を返します。
  • Name プロパティを 1 つだけ持つ新しい DataContract を作成し、これらのオブジェクトのリストを返すことができます。

私のアドバイスは、同じ DataContract を使用し、必要なデータのみをデータ アクセス メソッドにロードすることです。たとえば、名前のみがロードされた ProcessLocationData のリストを作成する新しいメソッド GetProcessLocationsName() を作成します。

于 2012-05-31T09:32:41.583 に答える