0

我的服务配置如下:

<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

4 回答 4

2

在端点块内设置以下值

<identity>
   <dns value ="localhost"/>
</identity>
于 2014-01-13T11:28:47.867 回答
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")"
于 2013-09-04T16:18:34.027 回答
1

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

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

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

  2. 右键单击您的 wcf 项目 -> 选择属性-> 转到Web 选项卡-> 现在在服务器部分-> 选择使用 Visual Studio 开发服务器-> 选择特定端口并提供我们之前从 Service1 中找到的端口地址。 svc 服务。即(61122)

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

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

于 2016-10-21T07:18:35.113 回答
0

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

<identity>
   <dns value ="localhost"/>
</identity>
于 2015-12-30T22:58:14.503 回答