0

ステップ 1、ASP.NET (C#) を使用して WebService を作成しました。

[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

ステップ 3、VC で空の C プロジェクトを作成し、次のファイルを追加します。

ステップ 4、フォルダーを構成し、新しいクラスを作成します。

#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" である必要があります。これらのことについて私が見逃していたことを教えてください。ありがとう!

4

2 に答える 2

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 は引数の値をサーバーに正しく送信できます。

于 2012-12-27T01:46:28.567 に答える
0

サービスが引数を 0 として受け取ると、同様の問題が発生し、結果として 0 が返されます。これが役に立てば幸いです。 gsoap2.8 クライアントと wcf サービス()

于 2012-12-25T16:32:48.847 に答える