在尝试设置双工模式通道时,我已将文件传输服务从 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。
再次感谢。