2009-10-20 51 views
0

我正在設計一個多文件上傳服務,它還顯示每個文件的上傳 進度。使用類型列表調用客戶端WCF服務<Of T>

如果我來設計我的WCF方法作爲SOAP的合同,我會做 是這樣的:

var request = IService.UploadMethod(List<Upload> request); 

但是,我怎麼傳遞參數「的」類型「List<Upload>」「請求」 當我從客戶端調用方法(../upload.svc/ uploadpictures /「」request「」)?

幫助表示感謝,謝謝。

回答

0

您正在使用SOAP,就像您自己說的那樣 - 這意味着您不能僅從URL調用服務方法(REST風格),因爲發佈的第二部分意味着(../upload.svc/ uploadpictures/「請求」)。

你需要在SOAP做的就是這個(假設你使用Visual Studio或svcutil創建您的客戶端代理):

// create client side proxy, reading URI etc. from config 
ServiceClient clientProxy = new ServiceClient(); 

List<Upload> _list = new List<Upload>(); 

// add your uploads - don't know what that is - just a filename? The actual 
// contents of the file? That's up to you 
_list.Add(..........); 

var response = clientProxy.UploadMethod(_list); 

馬克

+0

馬克 - 我的反應是在上述(或低於) 「接聽」。謝謝你的想法。 – 2009-10-20 14:06:02

0

謝謝您的回答。

我對我的API的一部分使用SOAP,但我也使用webhttp端點 進行REST風格的xhr調用和JSON響應。我已經能夠在節目中做到這一點 別處:

var url = "trade.svc/GetCategoryChildren/" + parentID + "/json"; 
     var httpStatus; 
     xmlhttp.open("GET", url, true); 
     xmlhttp.send(null); 

我試圖做同樣的事情對我的上傳服務,但是,正如你所指出 出來,收集List<Upload> request = new List<Upload>();是C#,JavaScript不 和我我不太確定如何以REST方式傳遞參數。這可能嗎? 想法感激?

<service behaviorConfiguration="Default" name="WebClient.UploadService"> 
     <endpoint address="json" behaviorConfiguration="WebHttpEPBehavior" 
        binding="webHttpBinding" name="MyJSONUploadEP" contract="WebClient.IJSONUploadService" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:2534/Web/upload.svc" /> 
      </baseAddresses> 
     </host> 
     </service> 

響應薩哈 -

請求應類似於我在以前的文章中概述的XMLHTTP請求對象。您希望將您的端點作爲xmlhttp.open(「GET」,url,true)中的URL參數傳遞。你的參數應該遵循相同的約定:「service.svc/function/param1/param2/param3」。

在服務器上,您想要將服務的綁定設計爲webHttpBinding - 在我的發佈配置文件中查看MyJSONUploadEP。然後,在您的合同中(在我的示例中爲WebClient.IJSONUploadService),您希望爲請求的方法指定帶有JSON重定義格式的WebGet屬性。在我的合同,我有:

[WebGet(UriTemplate = "GetCategoryChildrenJSON/{parentID}/{format}", ResponseFormat = WebMessageFormat.Json)] 
Tuple<string, int> GetCategoryChildren(string parentID, string format); 

順便說一句,我認爲應該有不同的響應格式不同的合同(IJSONUploadService.cs,IPOXUploadService.cs和ISOAPUploadService.cs根據需要然後將其繼承)。因此,舉例來說,您的WCF類看起來是這樣的:

public class UploadService : IJSONUploadService 

如果你想在你的JSON響應返回一個整數數字,你應該設計具有get/set整數類型的支撐類 - 東西像:

public class Items 
    { 
     public int PropA { get; set; } 
     public int PropB { get; set; } 
     public int PropC { get; set; } 
     public int PropD { get; set; } 
     public int PropE { get; set; } 
     etc... 
    } 

然後,從數據庫中檢索數據後,你將需要填充 您(在這種情況下,類型項目)名單:

List<Items> categories = new List<Items>(); 

接下來,您將需要序列化您的發送 到客戶端的類型項目列表。我正在使用名爲JSONHelper的類來執行此操作,但在Internet上有大量示例。您可以先查找
「System.Runtime.Serialization.Json」命名空間。以下是我對 序列化對象的樣子:

string dtSerialized = JSONHelper.Serialize<List<Items>>(categories); 
Tuple<int, int> retParam = new Tuple<int, int>(dtSerialized, errCode); 
return retParam; 

最後,在客戶端上,你將需要處理使用某種JavaScript的響應處理的JSON響應。這裏有很多這種在線的例子 - 你可能想 嘗試從http://json.org/js.html開始。

HTH, 彼得

+0

你應該編輯你的原始問題並且擴展它/澄清它,而不是添加你自己的答案 – 2009-10-20 16:24:06

相關問題