34

在尝试设置双工模式通道时,我已将文件传输服务从 basicHttpBinding 移至 netTcpBinding。我还启动了我的 net.tcp 端口共享服务。

我目前在开发中,并且在我们将应用程序移动到开发服务器之前,我在 xp 盒子上自行托管。所以,目前,我无法访问 IIS。

像这样配置我的服务后:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
        <endpoint name="MyFileTransferEP"
                  address  = ""
                  binding  = "netTcpBinding"
                  bindingConfiguration="MyFileTransferNetTcpEP"
                  behaviorConfiguration="NetTcpEPBehavior"
                  contract="API.FileTransfer.IFileTransferService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" />
          </baseAddresses>
        </host>
</service>

而且,我的绑定是这样的:

<netTcpBinding>
        <binding name="MyFileTransferNetTcpEP"
                 hostNameComparisonMode="StrongWildcard"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00" 
                 receiveTimeout="00:10:00" 
                 sendTimeout="00:01:00"
                 maxReceivedMessageSize="2147483647"
                 transferMode="Streamed"
                 portSharingEnabled="true">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
</netTcpBinding>

当我正确浏览 SVC 文件时出现以下错误:

找不到与具有绑定 NetTcpBinding 的终结点的方案 net.tcp 匹配的基地址。注册的基地址方案是 [http]。

在线阅读表明,为了解决这个问题,我需要将 net.tcp 绑定添加到 IIS 中应用程序的绑定中。但是,如果我是自托管并且无法访问 IIS,我该怎么办?顺便说一句,如果您正在阅读本文并且“确实”拥有 IIS,请执行以下操作:右键单击 IIS 中的虚拟目录/应用程序 -> 管理应用程序 -> 高级设置。并且,在 Enabled Protocols 部分,添加 net.tcp。

有任何想法吗?


更新:我以为我有它的工作,但它仍然没有工作。这是我现在所拥有的:我仍然收到“找不到与方案 net.tcp 匹配的基地址”错误。我已更改所有基址以反映您的建议。这是我现在拥有的:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
            <endpoint name="MyJSONFileTransferEP"
                      address="json"
                      binding="webHttpBinding"
                      bindingConfiguration="jsonWeb"
                      behaviorConfiguration="WebHttpEPBehavior"
                      contract="API.FileTransfer.IJSONFileTransferService" />
            <endpoint name="MyPOXFileTransferEP"
                      address="pox"
                      behaviorConfiguration="WebHttpEPBehavior"
                      binding="webHttpBinding"
                      bindingConfiguration="poxWeb"
                      contract="API.FileTransfer.IPOXFileTransferService" />
            <endpoint name="MySOAPFileTransferEP"
                      address="filetransfer"
                      binding="netTcpBinding"
                      bindingConfiguration="netTcpWeb"
                      behaviorConfiguration="NetTcpEPBehavior"
                      contract="API.FileTransfer.ISOAPFileTransferService" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:2544/filetransfer/" />
              </baseAddresses>
            </host>
          </service>

我用“net.tcp://localhost:2544”和“net.tcp://localhost:8001”都试过了。我是否需要在我的防火墙设置中添加(允许)某些内容?还有其他建议吗?

这是我的 App.config 文件中的 filetransferservice 的 mexTcpBinding:

<endpoint address="net.tcp://localhost:2544/filetransfer/mex"
        binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"
        name="filetransfermex">
        <identity>
          <certificateReference storeName="My" storeLocation="LocalMachine"
            x509FindType="FindBySubjectDistinguishedName" />
        </identity>
      </endpoint>

我仍然无法在我的网络应用程序中引用我的 FileTransferServiceClient。

再次感谢。

4

10 回答 10

44

错误 (WCF): 找不到与具有绑定 NetTcpBinding 的终结点的方案 net.tcp 匹配的基地址。注册的基地址方案是 [http]。

第 1 步:注意 WAS(Windows 进程激活服务)或非 http 协议支持,仅受以下平台支持: • Windows Vista • Windows 7 • Windows Server 2008

  1. 转到打开或关闭 Windows 功能
  2. 转到 Microsoft .NET Framework 3.5
  3. 检查 Windows Communication Foundation HTTP 激活
  4. 检查 Windows Communication Foundation 非 HTTP 激活

第 2 步:IIS > WCF 主机网站 > 管理应用程序 > 高级设置 > 启用协议 > 将值设置为 HTTP,NET.TCP

于 2012-05-15T07:11:27.970 回答
26

您只需要为您的服务定义基地址(而不是整个地址),然后在服务端点中定义其余的地址。filetransfer.svc文件末尾的地址不是有效的基地址(实际上是文件地址)

<service behaviorConfiguration="transferServiceBehavior" 
         name="API.FileTransfer.FileTransferService">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8001/project/" />
      </baseAddresses>
    </host>
    <endpoint name="MyFileTransferEP"
              address  = "filetransfer"
              binding  = "netTcpBinding"
              bindingConfiguration="MyFileTransferNetTcpEP"
              behaviorConfiguration="NetTcpEPBehavior"
              contract="API.FileTransfer.IFileTransferService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

有了这个,并使用自托管,您的服务将在完整的地址可用:

net.tcp://localhost:8001/project/filetransfer

由于这是 net.tcp 并且您是自托管的,因此根本不需要 svc 文件。

更新:如果您希望能够在 net.TCP 基地址上获取元数据,则需要在您的<service>部分中公开一个 net.Tcp MEX 端点,如下所示:

        <endpoint name="NetTcpMEX"
                  address="netTcpMex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
于 2009-11-24T21:47:04.760 回答
18

IIS 中“启用的协议”条目中的空格 => 选择虚拟目录/应用程序 => 高级设置 => 启用的协议。例如http、net.tcp。(协议文本之间的空格

这应该是http,net.tcp (即协议文本之间没有空格)

于 2014-03-04T02:50:16.273 回答
10

在经历了很多解决方案之后..我在这个博客中找到了最终的解决方案..但是我将在这里解释整个过程..您需要按照以下步骤操作..

Step1: (Windows Process Activation Service)或非http协议支持,仅支持以下平台: • Windows Vista • Windows 7 • Windows Server 2008

  • 转到打开或关闭 Windows 功能
  • 转到 Microsoft .NET Framework 3.5
  • 检查 Windows Communication Foundation HTTP 激活
  • 检查 Windows Communication Foundation 非 HTTP 激活

第 2 步: IIS > WCF 主机网站 > 管理应用程序 > 高级设置 > 启用协议 > 将值设置为http,net.tcp

检查您的问题是否在第 2 步完成后解决。如果没有,请按照以下步骤操作

第 3 步: 在 中administrator-level Command Prompt window,运行以下命令。

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='8082:*']

重新启动 IIS一次,否则您Failed to map the path '/'现在可能会出现异常

您的应用程序提前设置现在如下所示

在此处输入图像描述

于 2016-03-16T08:43:19.017 回答
9

对于未来的读者。

确保您没有使用 IIS-Express。

这是我的“陷阱”。

参考:

http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq

        Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ?
        A: No. IIS Express only supports HTTP and HTTPS as its protocol.

这是 Visual Studio 和 web.csproj(或类似)属性和“Web”左侧选项卡下的属性。有一个名为“使用 IIS Express”的复选框。取消选中。

完成此操作后,您仍然需要转到 IIS(7) 和“http,net.tcp”以获取“启用的协议”(如此处其他答案中所述)

此外,如果您收到命名管道特定错误。

找不到与绑定NetNamedPipeBinding的端点的方案 net.pipe 匹配的基地址。

然后您需要将“net.pipe”添加到列表中。

例子:

http,net.tcp,net.pipe

另请参阅下面的命名管道特定错误。

将 WCF 配置为托管在 IIS7 上的命名管道

还:检查这些相应的 Windows 服务(命名管道或 tcp 或两者)

(命名管道windows服务)

NetPipeActivator

Net.Pipe Listener Adapter

Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service.

(tcp windows服务)

NetTcpActivator

Net.Tcp Listener Adapter

Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service.
于 2014-12-19T20:47:04.100 回答
5

请从控制面板 -> 程序 -> 打开或关闭窗口 -> 功能 -> 添加功能 -> .net framework 安装“非 Http 激活”窗口组件* 功能 -> Wcf 激活 -> 非 Http 激活。

于 2011-08-08T11:00:50.387 回答
3

对于 Windows 10
步骤 1:转到打开和关闭 Windows 功能 > .Net Framework 4.6 高级服务 > WCF 服务 > TCP 激活

第 2 步:IIS > WCF 主机网站 > 管理应用程序 > 高级设置 > 启用协议 > 将值设置为 net.tcp,http

第 3 步:使用管理权限打开命令控制台 > 输入 iisreset

于 2016-03-24T19:34:47.440 回答
1

我遇到了同样的问题(环境:Win7/IIS7.5 .NET4),我通过 appcmd.exe 配置绑定解决了这个问题,可从目录“c:\Windows\System32\inetsrv”获得

"appcmd.exe 设置 pp "WebsiteName/applicationName" /enabledProtocols:http,net.tcp"

注意:IIS 配置是分层的,因此我们应该在尽可能低的级别更改配置,以避免其他应用程序出现不必要的更改/安全问题。

以下链接可能会有所帮助:http: //msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

希望这有助于阿尔伯特

于 2013-05-31T12:20:51.497 回答
0

我在 Windows 7 上遇到了同样的错误,并通过打开 IIS 来修复它,右键单击包含您的应用程序的网站并选择“编辑绑定...”。我在这里添加了 net.tcp 绑定,问题就解决了。

站点绑定 PrintScreen

于 2019-05-09T08:11:42.627 回答
-1
<add baseAddress="net.tcp://localhost:8090" />

请在配置文件中编辑它,如图所示

于 2021-03-08T07:58:02.520 回答