2012-05-31 49 views
0

這是很尷尬的,試圖找到自己的解決方案,但真正缺乏知識我無法去,所以我張貼我的問題在這裏。堅持打電話給WCF對象

我的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),並只獲取名稱並添加到新的數組?這有意義嗎?

請有人引導我進入正確的道路。提前感謝。

+0

okie終於拆分了數組,並從變量中獲得了名稱來解決我的問題。謝謝全部 – Usher

回答

2

我對你的問題有點困惑。 我明白,你想有2個服務方法,他們都返回一個ProcessLocationData數組,一個返回帶有ID和名稱的列表(GetProcessLocations),另一個返回帶有名稱的只有名稱的ProcessLocationData數組(GetProcessLocationsOnlyName)。 而你的問題是,客戶端代理不包含GetProcessLocationsOnlyName方法。

您應該確保這兩種方法都注有OperationContract,否則它們將不會被您的服務公開。您應該在服務界面中或在服務中直接使用此屬性。您可以看到您的服務在wsdl中使用了這兩種方法,或者使用了WCF Test Client

然後你必須確保你的客戶端代理是最新的。

  • 如果是使用Visual Studio生成您的客戶端代理,你應該嘗試update您的服務引用
  • 如果您的客戶端代理使用產生SvcUtil工具,你必須重新生成它manually

與您的評論相關,如果您只想返回姓名字段,則可以選擇以下選項。

  • 您可以使用相同的DataContract,這意味着返回ProcessLocationData的列表,並返回一個空的ID爲每個對象
  • 您可以創建只有一個屬性,名稱的新DataContract,並返回一個列表這些對象

我的建議是使用相同的DataContract並僅加載數據訪問方法中所需的數據。例如,創建一個新方法GetProcessLocationsName(),該方法將創建ProcessLocationData的列表,並僅加載它們的名稱。

+0

對不起,我可能有點困惑,我在OP.Okie中構成問題的方式都是重新編號的ID和Name.My問題是如何我只能獲得名稱並添加到數組中?這有意義嗎? – Usher