1

我的客户正在使用从 WSDL 创建的代理...是否可以将服务设置为发送 List 而不是MyCustomObject[]

我在用

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

但不起作用...

我的客户使用 Visual C++

IDE 是 Visual Studio 2012 --> 无法添加服务引用

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]
        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 回答