1

私のクライアントはWSDLから作成されたプロキシを使用しています...代わりにリストを送信するようにサービスを設定することは可能MyCustomObject[]ですか?

使ってます

svcutil /t:metadata /ct:System.Collections.Generic.List`1 localhost:8080/managedApp 

しかし、動作しません...

私のクライアントはVisualC++です

IDEはVisualStudio2012です->サービス参照を追加できません

4

2 に答える 2

3

はい、そうです。

/ collectionType:svcutil.exeを直接使用している場合、または[サービス参照の追加]の場合は、[詳細設定]-> [コレクションの種類]に移動して、必要なものに変更します。

Webサービス/WCF「サービス」を使用する場合、エンドポイントは常にXML / JSONでシリアル化されたデータを受信しますが、このデータはC ++データ型に逆シリアル化され、どのコレクションタイプで受信したかはユーザー次第です。いくつかのコレクションを含むデータ。

于 2012-11-25T15:55:10.917 に答える
0

わかりました...最後に私はあきらめました、私はちょうどstd:listの代わりに配列としてデータを送りました...

1.- svcutil / t:metadataを使用してサービスからメタデータを取得します(注:サービスが実行されている必要があります)。2.-プロキシwsutil*.wsdl * .xsdを作成します。3.-プロキシファイル(.hおよび.c)をクライアントに追加し、プロキシ機能をサービスに使用します。

ただし、cプログラミングに慣れていない場合は、配列は少し注意が必要です...

DataContract:

    [DataContract]
        public class CompositeType
        {
            CompositeType2[] ctListValue;
            bool boolValue;
            string stringValue;

            [DataMember]
            public bool BoolValue
            {
                get { return boolValue; }
                set { boolValue = value; }
            }

            [DataMember]
            public string StringValue
            {
                get { return stringValue; }
                set { stringValue = value; }
            }

            [DataMember]
            public CompositeType2[] CtListValue
            {
                get { return ctListValue; }
                set { ctListValue = value; }
            }
        }

        [DataContract]
        public class CompositeType2
        {
            bool boolValue;
            string stringValue;

            [DataMember]
            public bool BoolValue
            {
                get { return boolValue; }
                set { boolValue = value; }
            }

            [DataMember]
            public string StringValue
            {
                get { return stringValue; }
                set { stringValue = value; }
            }
        }

配列の呼び出しのクライアント側:

// *** COMPOSITETYPE CALL
    CompositeType * co = new CompositeType();
    co->BoolValue = true;
    co->StringValue = L"Im co";

    CompositeType2 co0;
    co0.BoolValue = true;
    co0.StringValue = L"Im co0";

    CompositeType2 co1;
    co1.BoolValue = true;
    co1.StringValue = L"Im co1";

    CompositeType2 co2;
    co2.BoolValue = true;
    co2.StringValue = L"Im co2";

    CompositeType2 ** comType2; // <-- this is my CompositeType2[] I will send to the service
    comType2 = new CompositeType2*[3];

    comType2[0] = &co0;
    comType2[1] = &co1;
    comType2[2] = &co2;

    co->CtListValue = comType2;
    co->CtListValueCount = 3;

    CompositeType* result2;

    BasicHttpBinding_IHelloWorldService_SayHelloCompType(
            proxy, co, &result2,
            heap, NULL, 0, NULL, error);

お役に立てれば...

于 2012-12-01T00:01:13.000 に答える