.NET Web服务中的多个输出参数(无复杂类型)

时间:2010-09-17 14:36:07

标签: c# web-services asmx return-type

是否可以创建一个返回多个字符串的C#Web服务,而不会生成复杂类型? (因为我的客户端无法处理复杂的类型,我需要返回两个名称为“wwretval”和“wwrettext”的字符串)

我已经尝试创建一个结构或类,或者使用params来创建它,但它总是在WSDL中生成一个复杂的类型。

2 个答案:

答案 0 :(得分:1)

您是否可以将它们作为XML blob发送,或者,如果不这样做,请将字符串打包成单个字符串分隔符,使用非打印字符(例如\ n)将其拆分为另一端?

后者不是很优雅,但可以奏效。

由于您无法更改客户端,您可以通过强制Soap使用带有文字绑定的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#

答案 1 :(得分:0)

您可以发送由';'分隔的2个字符串。客户端拆分了字符串。

(来自地狱的牛仔编码员)