2012-01-17 59 views
1

我正在構建一個簡單的自託管WCF服務,該服務將託管多個產品的映射服務。WCF Array始終充當數據集

這裏是我的接口:

namespace Eps.Messaging.Mapper.MapperServiceLibrary 
{ 
[ServiceContract] 
public interface IMapperService 
{ 
    [OperationContract] 
    public MapperOutput Map(String MapperFilename, String Input, GlobalArgument[] InputArguments); 

    [OperationContract] 
    public List<string> GetAvailableMaps(); 
} 

[DataContract] 
public class SymphoniaGlobalArgument 
{ 
    [DataMember] 
    public String Name { get; set; } 

    [DataMember] 
    public String Value { get; set; } 
} 
} 

我只是很繼承IMapperService,並根據需要在服務端實現它們。

下面是綁定的配置:

<services> 
     <service name="Eps.Messaging.Mapper.MapperServiceLibrary.MapperService"> 
      <endpoint address="" binding="wsHttpBinding" contract="Eps.Messaging.Mapper.MapperServiceLibrary.MapperService"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost:8755/Design_Time_Addresses/Eps.Messaging.Mapper.MapperServiceLibrary/MapperService/" /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 

在客戶端,我創建在Visual Studio中的服務引用和指向該位置。在創建該服務的一個實例,我這樣做:

MapperServiceClient Test = new MapperServiceClient(); 
Test.Map("Test.map", "Blah", BAD_HERE); 

凡說BAD_HERE它正在尋找替代System.Data.DataSet中的數組。

我在做什麼錯?或者這是正確的,我需要做一些花哨的投射,讓它接受一個數組?

回答

0

Configure Service Reference dialog box上的設置允許您配置集合類型的處理方式。將Collection type組合框中的值修改爲適當的類型(例如數組)。

+0

我有它設置爲使用System.Array的「集合類型」。這是不是正確的設置? 我已經嘗試了幾乎所有的選項,並且發生了同樣的事情。 – Khirok 2012-01-17 16:26:35

+0

@Khirok似乎是正確的。你可以嘗試直接使用svcutil生成你的代理並檢查這些類型是否正確 - 請參閱http://msdn.microsoft.com/en-us/library/ms733133.aspx。 – 2012-01-17 16:30:46

+0

用DataSet類型生成它。同事剛剛告訴我他也試過這個,並且看到了一個數組和一個字典。 – Khirok 2012-01-17 16:42:03