2012-12-25 2 views
0

шаг 1, я имел создать WebService с помощью ASP.NET (C#):GSoap клиент не может передать значение аргумента для сервера

[WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class WebService1 : System.Web.Services.WebService 
    { 

     [WebMethod] 
     public string HelloWorld(int a, int b) 
     { 
      return a.ToString() + "," + b.ToString(); 
     } 
    } 

шага 2, а затем я использовать gsoap_2.8.12 генерировать код, используя следующую команду :

wsdl2h -c -o a.h http://localhost:29556/WebService1.asmx?WSDL 
    soapcpp2 -c -C -I import a.h 

step3, создайте пустой проект C в VC, добавьте следующие файлы: soapH.h soapStub.h stdsoap2.h soapC.c soapClient.c stdsoap2.c

step4, конфиг папки, и создать новый класс:

#include <stdio.h> 
#include "WebService1Soap.nsmap"; 

void main() 
{ 
    struct soap soap; 
    int ret; 
    struct _ns1__HelloWorld hello; 
    struct _ns1__HelloWorldResponse respHello; 
    int arg1, arg2; 

    soap_init(&soap); 
    hello.a = 2; 
    hello.b = 3; 

    ret = soap_call___ns1__HelloWorld(&soap, NULL, NULL, &hello, &respHello); 
    if (ret == SOAP_OK) 
    { 
     printf("return :%s", respHello.HelloWorldResult); 
    } 
    else 
    { 
     printf("error :%d", ret); 
    } 

    getchar(); 
} 

Проблема: возвращаемое значение "0,0", как мы ожидаем, что это должно быть "2,3" , Скажите, пожалуйста, что я пропустил? благодаря!

ответ

0

после часов работы, я уже исправил эту вещь, если вы используете WCF, то вам нужно добавить атрибут в вашу работу, например:

[ServiceContract] 
    public interface IMyService 
    { 
     [OperationContract] 
     [XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Literal)] 
     long Method1(int a, int b, long c, string d); 
    } 

при использовании WebService, что должно быть:

[WebMethod] 
     [System.Web.Services.Protocols.SoapRpcMethodAttribute(Use = System.Web.Services.Description.SoapBindingUse.Literal)] 
     public string HelloWorld(int a, int b) 
     { 
      return a.ToString() + "," + b.ToString(); 
     } 

поэтому gsoap может правильно отправить значение аргумента серверу.

0

У меня была аналогичная проблема, когда служба получает аргументы как 0s, в результате возвращает 0. Надеюсь, это вам поможет. gsoap2.8 client and wcf service()

+0

Отлично. Спасибо, тимил. Использование XmlSerializerFormat (...) Я возвращаюсь к версии gSOAP 2.8.12_2 без проблем, RPC подходит для меня – dzzunga

Смежные вопросы