0

开发环境:

服务托管在 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

4

1 回答 1

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" />
于 2013-03-05T20:53:54.023 回答