Web Services WCF方法调用两次

bq8i3lrv  于 2023-10-24  发布在  其他
关注(0)|答案(7)|浏览(219)

我有一个Web服务,它正在向桌面应用程序返回数据。我遇到的问题是,当Web服务返回少量数据时,一切正常,但当数据量很大时,它会抛出以下异常:
System.Net.WebException:基础连接已关闭:接收时发生意外错误。
当我调试Web服务时,我看到这个特定的方法被调用了两次。它第一次执行return语句时没有发生任何事情,但是当它第二次执行它时,上面提到的异常在桌面应用程序中被抛出。
我以前在stackoverflow上发现过类似的帖子,但它们并没有解决我的问题。有人能告诉我这里发生了什么吗?
谢谢你,谢谢

7qhs6swi

7qhs6swi1#

这可能是因为消息的大小大于默认消息大小。您可以在端点的配置中尝试increasing the this value。您也可以查看this post
更新:
为了进一步诊断问题,我建议您通过在配置文件中放入以下内容来激活服务上的跟踪:

<system.diagnostics>
    <trace autoflush="true">
    </trace>
    <sources>
        <source name="System.ServiceModel"
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
            <listeners>
                <add name="sdt"
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData="WcfDetailTrace.e2e" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

这将生成WcfDetailTrace.e2e跟踪文件,您可以使用Service Trace Viewer Tool打开该文件,该文件将为您提供有关调用和错误消息的详细信息。

gj3fmq9x

gj3fmq9x2#

我最近遇到了这个问题。
结果是,分析System.Diagnostics. XmlWriterTraceReader编写的WCF日志时,我设置的数据契约出现了一个问题。
我返回了Dictionary<int, object>(旁注:是的,我知道这真的很糟糕!,但我还年轻,需要钱)。我忘记在DataContract的返回值中包含[KnownType]属性:

[DataContract]
    [KnownType(typeof(Dictionary<int, double>))]
    [KnownType(typeof(Dictionary<int, ChannelData>))]
    [KnownType(typeof(Dictionary<string, Dictionary<int, double>>))]
    public class MyCoolObject: ICoolObject
    {
[DataMember]
        public Dictionary<string, object> Results
        {
            get { return _results; }
            set { _results = value; }
        }
    }
vptzau2j

vptzau2j3#

我也有这个问题。对我来说,这是因为我有一个[DataMember]属性,其中有一个get{},但没有set{}。在添加set{}后,这种行为停止了。

zd287kbt

zd287kbt4#

我也遇到了同样的问题,结果发现WCF不能以JSON的形式返回DateTime,所以我不得不将其设置为Nullable<DateTime>

fhg3lkii

fhg3lkii5#

我最近遇到了这个问题,结果我忘记了用[DataContract]标记一个数据传输类。

rekjcdws

rekjcdws6#

我也遇到了这个问题,我的解决方案与Batgar的类似,但有一个变化。我有一个类,它有一个object类型的属性。我必须为对象可以容纳的每个类型添加KnownType属性。我不能在运行时填充KnownType,因为类不知道对象将包含什么。

7rtdyuoh

7rtdyuoh7#

我遇到了与OP完全相同的症状,但我的目标是一个我无法控制的Oracle Web服务。Web服务调用在独立的测试Web应用程序中工作正常,但在需要实现的.NET应用程序中却无法正常工作。
我不明白为什么,但是将web.config中的targetFramework从4.5更新到4.6.1解决了我的应用程序的问题。
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" executionTimeout="36000" />
<httpRuntime targetFramework="4.6.1" requestValidationMode="4.5" executionTimeout="36000" />

相关问题