为什么Web服务引用和服务引用的结果不同?

时间:2015-07-13 07:02:30

标签: c# web-services wcf

我对尝试理解服务引用 Web服务引用的概念时发生的一件事感到有点好奇。

我做的是什么?

在我的项目中,我添加了web service作为服务参考,并尝试通过使用客户端来运行我的脚本。 但是在获得结果时,它会抛出异常,如下图所示:

Exception while running the script

我试图找出原因,但无法得到正确答案。 我有以下代码用于生成的对象。

[
        ComVisible(false), 
        Serializable,
        SoapTypeAttribute("RecordList", "http://www.someadd.com/dev/ns/SOF/2.0"),       
        XmlType(TypeName="RecordList", Namespace="http://www.someadd.com/dev/ns/SOF/2.0")       
    ]
    public class MyRecordListWrapper
    {
        private IxRecordList recordList = null;
        private const string XMLW3CSchema = "http://www.w3.org/2001/XMLSchema";

        [SoapElement("Headers")]
        public Header[] Headers = null;
        [SoapElement("Records")]
        public Record[] Records = null;
        // some methods to work on intialization
        public SmRecordListWrapper(ref IxRecordList p_RecordList)
        {
            recordList = p_RecordList;// record list initialization             
            Headers = CreateWrapperHeaders(); // will return header class object
            Records = CreateWrapperRecords(); // will return record object
        }   
    }

有谁能告诉我为什么会出现这个错误?

将引用添加为Web服务引用 当我添加与web reference相同的引用时,程序没有显示任何错误并成功运行?

那么有谁能告诉我使用服务引用和Web服务引用使用相同的代码有什么区别? 哪种方法可以参考?

希望我能得到更多描述的答案,使事情易于理解。

提前致谢。

1 个答案:

答案 0 :(得分:1)

添加Web引用,visual studio使用xsd.exe从服务元数据生成类。这使用了引擎盖下的XmlSerializer。

添加服务引用,visual studio使用svcutil.exe从元数据生成类。这使用了DataContractSerializer。

两个独立的工具,两个结果。对于一般信息,DataContractSerializer在从元数据生成类时是a lot less forgiving