C#WCF - 无法调用服务

时间:2010-04-19 21:37:41

标签: c# wcf

尝试使用WCF测试客户端访问我的新Web服务时出现以下错误。奇怪的是,每隔一段时间它就会执行一次然后开始弹出这个错误。

  

无法调用该服务。可能的原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理,还原到默认配置或刷新服务来恢复。

我的代码(界面):

[ServiceContract(Namespace = "http://rivworks.com/Services/2010/04/19")]
public interface ISync
{
    [OperationContract]
    bool Execute(long ClientID);
}

我的代码(类):

public class Sync : ISync
{
    #region ISync Members
    bool ISync.Execute(long ClientID)
    {
        return model.Product(ClientID);
    }
    #endregion
}

我的配置(编辑 - 发布整个serviceModel部分):

<system.serviceModel>
  <diagnostics performanceCounters="Default">
    <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true"
      logMessagesAtTransportLevel="true" />
  </diagnostics>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
  <behaviors>
    <endpointBehaviors>
      <behavior name="JsonpServiceBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="SimpleServiceBehavior">
        <serviceMetadata httpGetEnabled="True" policyVersion="Policy15"/>
      </behavior>
      <behavior name="RivWorks.Web.Service.ServiceBehavior">
        <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
        <serviceMetadata httpGetEnabled="true"/>
        <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>

  <services>
    <service name="RivWorks.Web.Service.NegotiateService" behaviorConfiguration="SimpleServiceBehavior">
      <endpoint address=""
                binding="customBinding"
                bindingConfiguration="jsonpBinding"
                behaviorConfiguration="JsonpServiceBehavior"
                contract="RivWorks.Web.Service.NegotiateService" />
      <!--<host>
        <baseAddresses>
          <add baseAddress="http://kab.rivworks.com/services"/>
        </baseAddresses>
      </host>
      <endpoint address=""
                binding="wsHttpBinding"
                contract="RivWorks.Web.Service.NegotiateService" />-->
      <endpoint address="mex"
                binding="mexHttpBinding"
                contract="RivWorks.Web.Service.NegotiateService" />
    </service>
    <service name="RivWorks.Web.Service.Sync" behaviorConfiguration="RivWorks.Web.Service.ServiceBehavior">
      <endpoint address="" binding="wsHttpBinding" contract="RivWorks.Web.Service.ISync" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
  </services>

  <extensions>
    <bindingElementExtensions>
      <add name="jsonpMessageEncoding" type="RivWorks.Web.Service.JSONPBindingExtension, RivWorks.Web.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    </bindingElementExtensions>
  </extensions>

  <bindings>
    <customBinding>
      <binding name="jsonpBinding" >
        <jsonpMessageEncoding />
        <httpTransport manualAddressing="true"/>
      </binding>
    </customBinding>
  </bindings>    
</system.serviceModel>

2个问题:

  1. 我错过了什么导致此错误?
  2. 如何增加服务的时间?
  3. TIA!

1 个答案:

答案 0 :(得分:4)

发现问题......

  1. 未处理的Web服务中存在错误。
  2. 测试应用在发现错误时不会执行ABORT。相反,它由于错误而未被处理(并且未报告) AND 该频道现已被锁定。
  3. 在内部方法中使用try / catch使得我可以记录错误测试应用程序没有锁定。