2010-09-17 43 views
0

是否可以創建一個返回多個字符串而不生成複雜類型的C#Web服務? (因爲我的客戶端不能處理複雜的類型,我需要返回兩個字符串,名稱爲:「wwretval」和「wwrettext」).NET Web服務中的多個輸出參數(無複雜類型)

我已經嘗試創建一個結構或類或與out params,但它總是在WSDL中生成一個複雜的類型。

+0

ASMX web服務或WCF?另外,您的客戶端是否閱讀WSDL?它是什麼樣的客戶?柔性? PHP? – 2010-09-17 14:37:00

+0

ASMX(我從未嘗試過WCF)。 – manuelberger 2010-09-17 14:38:16

+0

客戶端是否在每個請求上讀取WSDL? – 2010-09-17 14:38:54

回答

0

您可以發送由';'分隔的2個字符串, 。客戶端分割字符串。

(來自地獄的牛仔編碼器)

+0

不,我不能:(我不能改變客戶端 – manuelberger 2010-09-17 14:42:56

+0

嗡嗡聲......但是如果你不改變它,你希望發送更多的信息.​​.....你能發佈客戶端的代碼嗎? – 2010-09-17 15:01:33

+0

我didn因爲我只知道wsdl應該是這樣的: manuelberger 2010-09-17 15:17:12

1

你能不能把它們作爲XML的blob,或做不到這一點,通過打印字符的包字符串成一個字符串分隔符號,如\ n然後在另一端他們拆分?

後者不完全優雅,但可以工作。

因爲你不能更改客戶端也許你可以通過強制香皂使用RPC模式文字的綁定欺騙它:

namespace WebTest 
{ 
    public struct UploadResponse 
    { 
     public string wwretval; 
     public string wwrettext; 
    } 

    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.None)] 
    [System.ComponentModel.ToolboxItem(false)] 

    public class Service1 : System.Web.Services.WebService 
    { 

     [SoapRpcMethod(ResponseElementName = "UploadResponse",Use=SoapBindingUse.Literal)] 
     [WebMethod] 
     public UploadResponse Upload() 
     { 
      UploadResponse ww = new UploadResponse(); 

      ww.wwretval = "Hello"; 
      ww.wwrettext = "World"; 
      return ww; 
     } 
    } 
} 

這將產生具有UploadResponse元素中兩個字符串的響應。然後,您可以生成一個假的wsdl,如下所述:How do I include my own wsdl in my Webservice in C#

+0

不,我不能:(我無法更改客戶端 – manuelberger 2010-09-17 14:43:33

+0

由於您無法更改我添加的客戶端我的答案的代碼片段將以正確的格式生成響應以及指向答案的鏈接,向您展示如何僞造wsdl。 – FixerMark 2010-09-19 16:29:31