2010-04-19 127 views
3

尝试使用WCF测试客户端命中我的新Web服务时出现以下错误。奇怪的是每隔一段时间它会执行一次然后开始弹出这个错误。C#WCF - 调用服务失败

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

我的代码(接口):

[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. 如何增加服务的时间?

TIA!

+0

TIA是什么意思? – Peter 2010-04-19 21:45:13

+0

@Petoj:意思是“提前致谢” – 2010-04-19 21:49:12

+1

你可以重新发布你的配置文件吗?在下有两个关闭标签,但只有一个开头标签。我无法分辨您是否仅仅删减了相关服务,或者确实搞砸了。 – 2010-04-19 21:55:59

回答

4

发现问题(S)...

  1. 有不是处理Web服务中的错误。
  2. 测试应用程序在发现错误时不会执行ABORT。相反,它没有处理(并且未报告)AND由于错误,通道现在被锁定。

把一个try/catch绕进去方法使得它,所以我可以记录错误测试程序不锁定。