【问题标题】:Why the result from the web service references and Service references are different?为什么 Web 服务引用和服务引用的结果不同?
【发布时间】:2015-10-01 08:29:13
【问题描述】:

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

我做的是什么?

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

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

[
        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 服务引用处理相同的代码有什么区别? 哪个是评估参考的正确方法?

希望我能得到更多描述性的答案,让事情变得容易理解。

提前致谢。

【问题讨论】:

  • 看到这个类似的问题:stackoverflow.com/questions/2158106/…
  • @Oscar 感谢您的建议,但我仍然不清楚为什么以及如何将我的代码用作service reference?以及为什么在使用 service references 时出现错误?
  • IxRecordList 是一个接口吗?是的,它被分配到哪里?您是否在代码的其他地方使用过 KnownType 属性? msdn.microsoft.com/en-us/library/ms751512(v=vs.110).aspx
  • @Oscar 我已经更新了代码,请检查。 :) 对于 KnowntypeAttributes,我使用 SoapElements 和 SoapTypeAttributes 进行 XMLSerialization
  • 不确定,但我认为由于 WCF 是独立于传输的,因此您应该使用 KnownTypes 属性而不是 SoapAttribute。 WCF 可以在 Soap 以外的其他场景下运行,所以不要拘泥于 xml 序列化。

标签: c# web-services wcf


【解决方案1】:

添加一个 Web 引用,Visual Studio 使用 xsd.exe 从服务元数据生成类。这在引擎盖下使用了 XmlSerializer。

添加服务引用,Visual Studio 使用 svcutil.exe 从元数据生成类。这在后台使用 DataContractSerializer。

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

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多