代码之家  ›  专栏  ›  技术社区  ›  serlingpa

WCF中的通信异常

  •  2
  • serlingpa  · 技术社区  · 14 年前

    我刚创建的WCF服务有问题。这是昨天的工作,但由于某种原因它刚刚停止工作。

        public BranchContactDetail[] GetClosestBranches(string postcode, int howManyBranches)
        {
            GeoLocation geoLocation = GetLocationFromPostcode(postcode);
            Location location = new Location(geoLocation.Latitude, geoLocation.Longitude);
    
            using (BranchDirectoryEntities entities = new BranchDirectoryEntities())
            {
                var branchesInOrder = entities.BranchContactDetails
                    .Where(b => b.latitude.HasValue && b.longitude.HasValue )
                    .OrderBy(b => location.DistanceFrom(b.latitude, b.longitude))
                    .Take(howManyBranches)
                    .ToArray();
    
                return branchesInOrder;
            }
        }
    

    …而且,就像我说的,昨天一切都很顺利。现在我得到了一个“底层连接已经关闭:连接意外关闭”的消息,我在网上到处搜索,但似乎没有人知道答案。有人对这个问题有什么看法吗?

    你好,马克

    2 回复  |  直到 14 年前
        1
  •  1
  •   marc_s    14 年前

    可能是你今天比昨天选择了更多的条目?您的服务方法返回数据的时间是否比默认的60秒长?或者,返回的实体的数据大小是否超过64K?

    我会做两件事:

    2) 打开WCF消息日志记录以查看线路上的内容

    对于第1点,您需要启用 serviceDebug 行为:

      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="debug">
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="debug" name="YourWCFService">
    

    当一个调用失败时,这将在客户机中为您提供详细信息。

    对于第2点,您需要执行以下步骤:

    内部 <system.serviceModel>

    <diagnostics>
      <messageLogging
          logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"
          logEntireMessage="true" logMalformedMessages="true"
          maxMessagesToLog="2500" maxSizeOfMessageToLog="256000" />
    </diagnostics>
    

    然后您还需要将其添加到app.config或web.config中:

      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel"
                        switchValue="Information, ActivityTracing"
                        propagateActivity="true">
            <listeners>
              <add name="default"
                   type="System.Diagnostics.XmlWriterTraceListener"
                   initializeData="C:\yourlogfile.svclog" />
            </listeners>
          </source>
        </sources>
        <trace autoflush="true" />
      </system.diagnostics>
    

    System.Diagnostics 名称空间-使用任何现成的名称空间,或创建自己的名称空间(例如,登录到数据库等)。

    您可以使用 WCF Trace Viewer Tool -很方便!

        2
  •  0
  •   Incognito    14 年前

    确保尝试从客户端计算机远程登录服务器。