找不到与方案 net.tcp 匹配的基地址

Posted

技术标签:

【中文标题】找不到与方案 net.tcp 匹配的基地址【英文标题】:Could not find a base address that matches scheme net.tcp 【发布时间】:2010-12-20 01:41:55 【问题描述】:

我已将文件传输服务从 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 文件时出现以下错误:

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

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

再次感谢。

【问题讨论】:

好吧,使用 baseAddress="net.tcp://localhost:2544/filetransfer/" 和 address="filetransfer" 在您的端点上,您的完整 URL 将是“net.tcp://localhost :2544/filetransfer/filetransfer" - 你尝试在那里连接吗?? 谢谢 - 愚蠢的疏忽。我通常在那里有“肥皂”并将其改回来。在过去的一个小时里,我用细齿梳子检查了我的 App.config 和 Web.config 文件,终于让它编译了。当我“添加服务参考”时,我可以参考 ../trade/mex 和 .../auth/mex 但我的 net.tcp .../filetransfer/mex 永远不会显示为选项。所以,除了我无法从我的 Web 应用程序访问 FileTransferServiceClient 之外,一切都编译得很好。知道为什么 .../filetransfer/mex 没有出现吗?我正在使用 mexTcpBinding 并在我的问题中发布了它的样子。再次感谢。 【参考方案1】:

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

第 1 步: 注意 WAS(Windows 进程激活服务)或非 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步问题更大:使用powershell解决***.com/a/12473835/1141876【参考方案2】:

您只需为您的服务定义基地址(而不是整个地址),然后在服务端点中定义其余部分。 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 基地址上获取元数据,您需要在您的 &lt;service&gt; 部分中公开一个类似这样的 net.Tcp MEX 端点:

        <endpoint name="NetTcpMEX"
                  address="netTcpMex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />

【讨论】:

看起来我仍然收到此错误。我试过你的建议,但似乎没有这样做。我更新了我的问题 - 还有其他建议吗?再次感谢。 嘿,再次感谢。我现在可以编译我的代码,但似乎无法在服务引用 UI 中添加我的 net.tcp 服务。另外,我有 用于服务。当我尝试在浏览器中导航到我的 url:“net.tcp://localhost:2544/filetransfer/soap”时,它告诉我“firefox 不知道如何打开此地址”。当我尝试从 filetransfer.svc 文件中浏览时(我知道这不是必需的),我很熟悉:“找不到与绑定 NetTcpBinding 的端点的方案 net.tcp 匹配的基地址。” 好的,这已解决(感谢您的回答)。我有一个相关的问题,但我会重新发布。再次感谢。 @CodeSherpa,请告知您如何获得“找不到与具有绑定 NetTcpBinding 的端点的方案 net.tcp 匹配的基地址”。我已经尝试过这个答案,但它不起作用【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

第一步: (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 '/' 异常

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

【讨论】:

【参考方案5】:

为未来的读者。

确保您使用 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

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

Configure WCF as Named Pipe hosted on 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.

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

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

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

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

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

希望对您有所帮助 阿尔伯特

【讨论】:

【参考方案9】:

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

Site Bindings PrintScreen

【讨论】:

【参考方案10】:
<add baseAddress="net.tcp://localhost:8090" />

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

【讨论】:

以上是关于找不到与方案 net.tcp 匹配的基地址的主要内容,如果未能解决你的问题,请参考以下文章

WCF 异常:找不到与端点的方案 http 匹配的基地址

带有 WCF 错误的 https:“找不到与方案 https 匹配的基地址”

找不到与端点方案 http 匹配的基地址,该端点具有绑定 WSHttpBinding 且没有解决方案

找不到与具有绑定 WebHttpBinding 的端点的方案 https 匹配的基地址。注册的基地址方案是 [http]

从 http 到 https,得到“找不到与绑定 WebHttpBinding 的端点的方案 http 匹配的基地址”

如何在 WCF 中修复“找不到与架构 http 匹配的基地址”...