wcf nettcpbinding远程主机强制关闭现有连接

时间:2013-03-05 20:19:41

标签: asp.net wcf iis nettcpbinding was

开发环境:

服务托管在IIS / WAS下

我在本地开发中开发了四种服务。当我从asp.net应用程序访问它们时,所有这四个都正常工作。我正在使用net.tcp协议进行连接。我已将net.tcp指定为站点级别和虚拟目录级别的允许协议。启动了与tcp相关的所有三项服务。

在我能够连接到服务的应用程序web.config中,我正在使用模拟

但是当我尝试通过在wcftestclient的添加服务项目中指定net.tcp url来连接服务时。我无法连接。对于其他两个服务的配置相同,我可以连接到这两个其他服务。

测试服务器: 我甚至部署在测试服务器上。即使在那里,我也面临同样的问题。我可以使用net.tcp url连接到相同的两个服务。但其他两个错误。下面列出了其中一个配置。在服务器上我甚至删除了允许的用户部分以使其为所有用户运行。

我得到的错误如下。

错误:无法从net.tcp获取元数据://localhost/servicesdev/SalesPersonService.svc如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定的情况下启用元数据发布地址。有关启用元数据发布的帮助,请参阅http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata上的MSDN文档Exchange错误URI:net.tcp://localhost/servicesdev/SalesPersonService.svc元数据包含无法解析的引用:'net.tcp:/ /localhost/servicesdev/SalesPersonService.svc”。套接字连接已中止。这可能是由于处理消息的错误或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:05:00'。远程主机

强制关闭现有连接

以下是配置部分。

 <services>
   <service behaviorConfiguration="ServiceBehavior" name="WCFServiceLibrary.SalesPersonService">
        <endpoint address="" binding="wsHttpBinding" contract="WCFServiceLibrary.ISalesPersonService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        <endpoint address="basic" binding="basicHttpBinding" contract="WCFServiceLibrary.ISalesPersonService" />
        <endpoint address="net.tcp://localhost/servicesdev/SalesPersonService.svc" binding="netTcpBinding" contract="WCFServiceLibrary.ISalesPersonService" listenUriMode="Explicit" />
      </service>
  </services>

<behaviors>
       <serviceBehaviors>
          <behavior name="ServiceBehavior">
           <serviceMetadata httpGetEnabled="true" />
           <serviceDebug includeExceptionDetailInFaults="false" />
          </behavior>
      </serviceBehaviors>
  </behaviors>


<system.web>
    <compilation targetFramework="4.0" debug="true" />
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" />
        <identity impersonate="true" />
        <authorization>
            <allow users="myuser" />
        </authorization>
  </system.web>

谢谢, BMP

1 个答案:

答案 0 :(得分:0)

您正在为mex指定相对地址,而不提供基址。尝试给出一个基地址,如下例所示。 mex的相对地址应该起作用

           <host>
              <baseAddresses>
               <add baseAddress="net.tcp://localhost/servicesdev/SalesPersonService.svc"/>
              </baseAddresses>
            </host>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary1.ISalesPersonService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
            <endpoint address="basic" binding="basicHttpBinding" contract="WcfServiceLibrary1.ISalesPersonService" />
            <endpoint address="" binding="netTcpBinding" contract="WcfServiceLibrary1.ISalesPersonService" />