none
求 使用 ms soap 3.0开发webservice客户端应用数组参数传参问题 RRS feed

  • 常规讨论

  • 我用soapclient来做,应为涉及到handler验证,只能用这个方法,参数是传入一个string数组,但是我怎么都不成功
    webservice:两个输入参数,一个返回值
    Input Parameter:Text (用了variant的VT_BSTR)
    Output Parameter:Set of text values
    Return Value: Int32

    USES_CONVERSION;
    DISPPARAMS params = {0};
    VARIANT args[2];
    VariantInit(&args[0]);
    VariantInit(&args[1]);
    args[0].vt = VT_BSTR;
    args[0].bstrVal = SysAllocString(L"test");
    args[1].vt = VT_SAFEARRAY; //这里修正过多个始终无法成功
    params.cArgs = 2;
    params.rgvarg= args;
    DISPID dispid = 0;
    bool bRet = false;
    UINT uArgErr=-1;
    EXCEPINFO excepinfo = {0};
    VARIANT varRet;
    VariantInit(&varRet);
    try{
    HRESULT hr = GetIDOfName(L"GetDeviceList", &dispid);
    if (SUCCEEDED(hr))
    {
    hr = m_pSoapClientPtr->Invoke(dispid,  IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, &varRet, &excepinfo, &uArgErr);
    if (SUCCEEDED(hr))
    {
    bRet = true;
    }
    ......
    目前情况,根据invoke的返回值,hr为0调用成功,但是params中的第二个输出参数值取不到,variant的类型还是vt_empty,而且我对args[1].vt 不能赋值,不然就会调用失败。

    另外符上我写的一个测试的webservice服务,传入一个字符串数组,通过webservice服务分配空间大小。
        <WebMethod()> _
        Public Function HelloWorld(ByVal str As String, ByRef list() As String) As String
            str = "Recieve:" + str
            ReDim list(5)
            list(0) = "test1"
            list(1) = "test2"
            list(2) = "test3"
            list(3) = "test4"
            list(4) = "test5"
            Return str
        End Function
    2009年10月6日 21:52