无法调用该服务。可能的原因:调用时服务处于脱机状态或无法访问

时间:2013-09-04 09:25:06

标签: c# .net wcf rest

我的服务配置如下:

<system.serviceModel>
    <services>
      <service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:808/service" />
          </baseAddresses>
        </host>
        <endpoint address="net.tcp://127.0.0.1:808/service/"
                  binding="netTcpBinding"
                  contract="WcfService1.IService1"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"   />

      </service>
    </services>
    <protocolMapping>
      <add scheme="net.tcp" binding="netTcpBinding"/>
    </protocolMapping>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    <endpointBehaviors>
      <behavior name="MyEndpointBehaviour">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

和客户端:

 <system.serviceModel>
        <bindings>
            <netTcpBinding>
                <binding name="NetTcpBinding_IService1" sendTimeout="00:05:00" />
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://127.0.0.1/service/" binding="netTcpBinding"
                bindingConfiguration="NetTcpBinding_IService1" contract="IService1"
                name="NetTcpBinding_IService1">
                <identity>
                    <servicePrincipalName value="host/MachineName" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>

使用WCFTestClient或SVCutil时,我能够发现并访问服务并生成代理或存根。

但是当我想调用任何方法时出现以下错误:

  

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

     

套接字连接已中止。这可能是由于处理邮件时出错或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:04:59.9980468'。

4 个答案:

答案 0 :(得分:1)

也许不是您正在寻找的答案,但是对于本地计算机上的开发,我总是使用HTTP端点。我发现Net.TCP只有在IIS中的服务器上托管时才能玩得很好。

部署到IIS服务器后,添加NET.TCP端点很容易。注意:基址不再具有IIS中设置的影响。要测试新的端点,最好先将浏览器中的服务重新启动到服务器中,这样就可以获得最佳的错误消息。

如果我理解正确,您在创建服务引用时尝试选择端点?那就是现在的运作方式。 如果您使用127.0.0.1/service/Service1.svc

创建服务参考

您应该在配置文件中看到类似以下内容。 (当我创建服务端点时,我总是将协议命名为后缀。

        <endpoint address="http://servername:8090/servername/servername.svc/Business"
              binding="basicHttpBinding" bindingConfiguration="BusinessHTTP"
              contract="servername.IService" name="BusinessHTTP" />
       <endpoint address="net.tcp://servername:8030/Service/Service.svc/Business"
              binding="netTcpBinding" bindingConfiguration="BusinessTCP"
              contract="servername.IService" name="BusinessTCP" />

然后在您的代码中,您可以选择要使用的端点。

Dim svc as New SeviceReferenceName.BusinessClient("BusinessTCP")"

答案 1 :(得分:1)

在端点块

中设置以下值
<identity>
   <dns value ="localhost"/>
</identity>

答案 2 :(得分:0)

默认情况下,NetTcp绑定是安全的。在客户端和服务之间的安全身份验证过程中,WCF确保服务标识与此元素的值匹配。因此,服务需要配置:

<identity>
   <dns value ="localhost"/>
</identity>

答案 3 :(得分:0)

我遇到了同样的问题。这是 EndpointAddress 的端口地址问题。在Visual Studio中,文件的端口地址(例如Service1.svc)和wcf项目的端口地址必须与 EndpointAddress 中的端口地址相同。让我来详细描述一下这个对我有用的解决方案。

检查端口地址有两个步骤。

  1. 在您的WCF项目中右键单击您的服务文件(例如Service1.svc) - &gt;在浏览器中选择在浏览器中查看,您需要 http://localhost:61122/Service1.svc ,所以现在记下您的端口地址为61122 < / p>

  2. 右键单击您的wcf项目 - &gt;而不是选择属性 - &gt;转到网络标签 - &gt;现在位于服务器部分 - &gt;选择使用Visual Studio开发服务器 - &gt;选择特定端口并提供我们之前从Service1.svc服务中找到的端口地址。那是(61122)

  3. 早些时候,我有一个不同的端口地址。正确指定端口地址后,我从第一步 EndpointAddress 61122 ,我的问题解决了。

    我希望这可以解决你的问题。